Das (&) geht mir richtig auf den Sack!

Das kaufmännische „und” geht mir wirklich richtig auf den Sack. Jedes mal meckert der Validator:

You may have forgotten to “escape” an ampersand (&) character, thus causing the validator to believe that you created a new, undefined entity that starts with “&”. If you wish to cause an “&” to appear within text or a URL, escape it by using “&”.

Nein! Ich will keine neue entity eintragen und ich habe auch nicht vergessen das & zu maskieren, ich will es, aber es geht nicht. Ich teste gerade mit phpBB und dem Newsaddon leider werden alle Links mit dem unmaskierten & ausgegeben. Bei Haseblog habe ich vor längerem eine Lösung diesbezüglich gesehen, aber anscheinend bin ich zu verpeilt diese Lösung richtig einzusetzen. Das Prinzip dahinter ist aus dem Dokument aus die php.ini zu überschreiben:

ini_set("arg_separator.output","&");

Das soll in den Dokumentkopf, aber es klappt irgendwie nicht. Ich habe es in Klartextform und innerhalb von <?php ?>, vor dem Doctype und innerhalb von <head></head> notiert, aber es nix geändert.

Hat jemand einen Vorschlag?

Diesen Blogartikel teilen:

Vladimir

Vladimir Simović arbeitet seit 2000 mit HTML & CSS und seit Januar 2004 mit WordPress. Im Laufe der Jahre hat er diverse Fachbücher und Fachartikel publiziert.

Verwandte Beiträge

6 Gedanken zu „Das (&) geht mir richtig auf den Sack!“

  1. Das Problem ist, dass dieser output-separator auch nur für PHP-intern erzeugte Links gilt. Es ist nicht so, dass durch das Setzen davon automagisch alle Links innerhalb der Seite ersetzt werden. Vielmehr nur für alle Links, die ein von HP angehängtes PHPSESSID enthalten; darum scheint es Dir in dem Newstool ja nicht zu gehen.

    Es gibt eine Möglichkeit ALLE &s in einer Seite zu ersetzen:

    ob_start();
    …hier dein üblicher seitenkope
    $content = ob_get_contents();
    ob_end_clean();
    echo preg_replace(‘@&([^;& ]*)@’, ‘&1’, $content);

    Der reguläre Ausdruck ist gerade meinem Geist entsprungen und kann eventuell nicht funktionieren; das gewünschte Prinzip wäre, dass er ein &(beliebige Zeichen ausser entities) in ein &amp(originalzeichen) ersetzt. Ein einfaches str_replace(‘&’, ‘&’, $content) würde nämlich aus & ein &amp; machen. Und das will ja keiner. 😉

    Ausserdem ist die Methode alles durch den Output-Buffer zu jagen enorm dirrrty und performanceraubend.

    Worauf ich hinauswill: Du wirst vermutlich nicht umgehr kommen, die News-Applikation von Hand so umzuschreiben dass sie korrekte entities erzeugt.

    While we’re at it: Ich finde man (=W3C) hätte für Entities ruhig ein ° oder ^ Zeichen nehmen können; das taucht viel seltener aus und würde nicht die o.g. Probleme erzeugen. 🙂

    HTH,
    Garvin.

  2. Man kann das & auch einfach durch &amp automatisch ersetzen lassen:

    str_replace(“&”,”&amp”,$ergebnis);

    So hab ich das auf meiner Seite gelöst, klappt wunderbar. Wenn das ganze dann noch in eine *.inc ausgelagert wird, kann man es ganz einfach auf jeder Seite includen. Auf jeden Fall muss das in der Seite Includet sein, in der die Beiträge geschrieben werden…

Kommentare sind geschlossen.