• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

URL W3C Validation mit Kaufmannsund (Ampersand &)

NetAktiv

Senior HTML'ler
Hallo,

ich habe schon einige Diskussionen im Internet zu diesem Thema gefunden, leider aber keine Lösung. Hat man einen Anker in der Form:
HTML:
<a href="index.php?p1=Test1&p2=Test2">Mylink</a>
dann liefert PHP wie erwartet korrekt (verkürzte Schreibweise) $p1='Test1' und $p2='Test2', aber der W3C Validator meckert wegen der unbekannten entity &p2. Verwende ich stattdessen wie vorgeschlagen den Link
HTML:
<a href="index.php?p1=Test1&amp;p2=Test2">Mylink</a>
dann liefert mir PHP $p1 korrekt, aber $amp;p2=Test2.
Verwende ich stattdessen wie auch vorgeschlagen den Link
HTML:
<a href="index.php?p1=Test1%26p2=Test2">Mylink</a>
dann liefert mir PHP $p1='Test1&p2=Test2'

Was ist also zu tun?
Grüße, Rainer
 
&amp; sollte funktionieren, wenn es bei dir nicht funktioniert machst du etwas falsch.
 
SOLLTE, tut es aber nicht. Ich schreibe die $_GET (oder $_REQUEST) Collection raus mit

PHP:
while (list($key,$value) = each($collection)) {  echo "$key == $value<br>"; }
Kannst es ja mal unter NetAktiv Php-Info testen und dann den & durch &amp; ersetzen.

Es ist sogar noch schlimmer als beschrieben. Hat man beispielweise in einem Script-Block etwas wie
HTML:
<script type="text/javascript" language="javascript">
    var x = 'mypage.php?p1=Test1&p2=Test2'; 
</script>
Dann meckert der Validator auch das an. Der Validator sollte aber den Code im Script-Block völlig ignorieren.
 
Zuletzt bearbeitet:
&amp; ist ein HTML Entity gehört also in den HTML Code und nicht in die URL Leiste, dort kommt die URL Kodierung zum tragen (mit %), aber für das Ampersand brauchst du dort keine Kodierung.

Zeig mir ein HTML Dokument, wo &amp; im Link nicht funktioniert.

Das der JS Code fehlerhaft liegt an der verwendeten HTML Version, nimm HTML5 und die Meldung ist weg. Oder meine Empfehlung: JS Code auslagern.
 
Hallo Struppi,
jetzt hab ich es mal gestestet und es funktioniert in der Tat, wenn man die Entity im Anker verwendet. Offenbar wandelt der Browser die Entity vor dem Submit in den & um. Ich hatte es nur direkt als URL in der Adresszeile eingegeben und da funtioniert &amp; nicht.

Die anderen Vorschläge gehen sicher auch, sind aus meiner Sicht aber nur Workarrounds für einen Bug im Validator. Der sollte den Inhalt von <script>-Blöcken nicht zu validieren versuchen. Ein weiterer Workarround wäre auch
HTML:
<script type="text/javascript" language="javascript"> 
    var AMPER = String.fromCharCode(38);
    var x = 'mypage.php?p1=Test1' + AMPER + 'p2=Test2';  
</script>
 
Die anderen Vorschläge gehen sicher auch, sind aus meiner Sicht aber nur Workarrounds für einen Bug im Validator. Der sollte den Inhalt von <script>-Blöcken nicht zu validieren versuchen. ]
Wenn du (X)HTML benutzt dann schon. Wenn dir soviel daran liegt einen Doctype zu verwenden, der nicht unbedingt zeitgemäß ist, dann musst du script Blöcke als CDATA markieren. Das steht aber meines Wissens auch in der Validatormeldung.

EDIT: Das language Attribut sollte der Validator aber auch bemäkeln. Welchen Doctype verwendest du denn?
 
Ich verwende den Doctype, den mein Programm (MS Expression Web Design 4.0 mit SP1) vorgibt und bei dem ich die Probleme beim Konvertieren meiner Seite nach strict zunächst mal vermeide. Im Header steht da:

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

Das language-Attribut wurde nicht angemeckert.
 
Ok, das ist (X)HTML Transitional, das mäkelt tatsächlich nicht das veraltete Attribut. Aber wie gesagt, es erwartet auch CDATA im Script Block.
 
Code:
<script type="text/javascript">
/*<![CDATA[*/
Hier der Scriptcode
/*]]>*/
</script>

Code:
<style type="text/css">
/*<![CDATA[*/
Hier die Style-Definitionen
/*]]>*/
</style>
 
Das CDATA kannte ich nicht. Nun ist es als JavaScript-Kommentar drin (ohne wollten ältere Browser das Script nimmer) und nun die Welt auch aus Sicht von W3C in Ordnung :-).
Danke und Grüße, Rainer
 
Naja, man sucht doch normal nur, wenn einen etwas stört oder man mit bekannten Mitteln nicht oder nur umständlich zum Ziel kommt. Das Meckern am Javascript hat mich erst mal nicht gestört, vorrangig war der & im Anker. Hinterher ist man immer schlauer.
 
Naja, man sucht doch normal nur, wenn einen etwas stört oder man mit bekannten Mitteln nicht oder nur umständlich zum Ziel kommt.
So meinte ich das nicht, ich hatte dir das Stichwort ja bereits gegeben. Das Wort markieren (z.b. mit einem Doppelklick) und dann das Kontextmenü im Friefox -> google suche nach ... auswählen und schon hättest du CDATA gekannt.
 
Zurück
Oben