Ich verwende ein ' &
' Symbol mit HTML5 und UTF-8 in meiner Site <title>
. Google zeigt das kaufmännische Und auf seinen SERPs an, ebenso wie alle Browser in ihren Titeln.
http://validator.w3.org gibt mir Folgendes :
& hat keine Zeichenreferenz gestartet. (& hätte wahrscheinlich als entkommen sollen
&
.)
Muss ich das wirklich tun &
?
Ich bin nicht besorgt darüber, dass meine Seiten validiert werden, um sie zu validieren, aber ich bin neugierig, die Meinungen der Leute dazu zu hören und ob es wichtig ist und warum.
validation
html
utf-8
character-encoding
Haroldo
quelle
quelle
Antworten:
Ja. Wie der Fehler bereits sagte, sind Attribute in HTML #PCDATA, was bedeutet, dass sie analysiert werden. Dies bedeutet, dass Sie Zeichenentitäten in den Attributen verwenden können. Die Verwendung
&
an sich ist falsch und wenn nicht für milde Browser und die Tatsache, dass dies HTML ist, nicht XHTML, würde das Parsen brechen. Entkomme einfach so&
und alles wäre in Ordnung.Mit HTML5 können Sie es frei lassen, aber nur, wenn die folgenden Daten nicht wie eine gültige Zeichenreferenz aussehen. Es ist jedoch besser, sich allen Instanzen dieses Symbols zu entziehen, als sich Gedanken darüber zu machen, welche sein sollten und welche nicht.
Denken Sie an diesen Punkt. Wenn Sie & to & amp; nicht entkommen, ist es schlecht genug für Daten, die Sie erstellen (wobei der Code sehr wohl ungültig sein könnte), und Sie können auch nicht Tag-Begrenzer entkommen, was ein großes Problem für vom Benutzer übermittelte Daten ist. Dies könnte sehr gut zu HTML- und Skript-Injection, Cookie-Diebstahl und anderen Exploits führen.
Bitte entkommen Sie einfach Ihrem Code. Das erspart Ihnen in Zukunft viel Ärger.
quelle
Abgesehen von der Validierung bleibt die Tatsache bestehen, dass das Codieren bestimmter Zeichen für ein HTML-Dokument wichtig ist, damit es ordnungsgemäß und sicher als Webseite gerendert werden kann.
Encoding
&
als&
unter allen Umständen für mich ist eine einfachere Regel zu leben, was die Wahrscheinlichkeit von Fehlern und Störungen zu reduzieren.Vergleichen Sie Folgendes: Was ist einfacher? was ist leichter zu nerven ?
Methodik 1
Methodik 2
(bitte mit einem Körnchen Salz;))
volt & amp
> In diesem Fall müssen Sie es nicht verschlüsseln.
amp&volt
> In diesem Fall stören Sie nicht die Codierung.
volt&
> Codieren Sie es.
??
quelle
amp&volt
ist nicht eindeutig: Ist&volt
jetzt eine Entitätsreferenz oder nicht?amp&volt
ist kein mehrdeutiges kaufmännisches Und (gemäß der Definition in der HTML-Spezifikation). Siehe mathiasbynens.be/notes/ambiguous-ampersands und momeff.in/ampersands#amp%26volt .HTML5-Regeln unterscheiden sich von HTML4. In HTML5 ist dies nicht erforderlich - es sei denn, das kaufmännische Und sieht so aus, als würde ein Parametername gestartet. "& copy = 2" ist beispielsweise immer noch ein Problem, da & copy; ist das Copyright-Symbol.
Es scheint mir jedoch schwieriger zu sein, je nach folgendem Text zu entscheiden, ob codiert oder nicht codiert werden soll. Der einfachste Weg ist also wahrscheinlich, die ganze Zeit zu codieren.
quelle
©=2
ist kein so großes Problem, wie Sie vielleicht denken. In Attributwerten (z. B. demhref
Attribut) wird das©
nicht als Zeichenreferenz für betrachtet©
. Außerhalb eines Attributwerts würde es.Ich denke, dies hat sich eher zu einer Frage entwickelt: "Warum sollte man der Spezifikation folgen, wenn es den Browsern egal ist?" Hier ist meine allgemeine Antwort:
Standards sind keine "gegenwärtige" Sache. Sie sind eine "zukünftige" Sache. Wenn wir als Entwickler Webstandards befolgen, implementieren Browseranbieter diese Standards mit größerer Wahrscheinlichkeit korrekt, und wir nähern uns einem vollständig interoperablen Web, in dem CSS-Hacks, Funktionserkennung und Browsererkennung nicht erforderlich sind. Wo wir nicht herausfinden müssen, warum unsere Layouts in einem bestimmten Browser kaputt gehen oder wie wir das umgehen können.
Insbesondere, wenn für HTML5 die Verwendung von & amp; Wenn Sie in Ihrer speziellen Situation einen HTML5-Doctype verwenden (und auch erwarten, dass Ihre Benutzer HTML5-kompatible Browser verwenden), gibt es keinen Grund, dies zu tun.
quelle
Nun, wenn es von Benutzereingaben kommt, dann absolut ja, aus offensichtlichen Gründen. Überlegen Sie, ob genau diese Website dies nicht getan hat: Der Titel dieser Frage wird angezeigt, wenn ich wirklich '&' als '&' codieren muss.
Wenn es nur so etwas ist, müssen
echo '<title>Dolce & Gabbana</title>';
Sie es streng genommen nicht. Es wäre besser, aber wenn Sie dies nicht tun, wird kein Benutzer den Unterschied bemerken.quelle
Können Sie uns zeigen, was Sie
title
eigentlich sind? Wenn ich einreichezu http://validator.w3.org/ - explizit aufgefordert, den experimentellen HTML 5-Modus zu verwenden - es gibt keine Beschwerden über die
&
...quelle
<title>Dolce & Gabbana</title>
und<p>Dolce & Gabbana</p>
sind gültiges HTML 2.0.In HTML
&
markiert a den Beginn einer Referenz, entweder einer Zeichenreferenz oder einer Entitätsreferenz . Ab diesem Zeitpunkt erwartet der Parser entweder eine#
Bezeichnung für eine Zeichenreferenz oder einen Entitätsnamen für eine Entitätsreferenz, gefolgt von a;
. Das ist das normale Verhalten.Aber wenn der Referenzname oder nur die Referenzöffnung
&
durch ein Leerzeichen oder andere Trennzeichen folgen mag"
,'
,<
,>
,&
, das Ende;
und auch eine Referenz eine Ebene darstellen&
kann verzichtet werden:Nur in diesen Fällen kann das Ende
;
oder sogar die Referenz selbst weggelassen werden (zumindest in HTML 4). Ich denke, HTML 5 erfordert das Ende;
.In der Spezifikation wird jedoch empfohlen , immer eine Referenz wie die Zeichenreferenz
&
oder die Entitätsreferenz&
zu verwenden, um Verwechslungen zu vermeiden:quelle
Wenn der Benutzer es an Sie weitergibt oder es in einer URL angezeigt wird, müssen Sie es maskieren.
Wenn es in statischem Text auf einer Seite erscheint? Alle Browser werden dies so oder so richtig machen, Sie machen sich keine großen Sorgen, da es funktionieren wird.
quelle
Update (März 2020): Der W3C-Validator beschwert sich nicht mehr über das Entkommen von URLs.
Ich habe überprüft, warum Bild-URLs ausgeblendet werden müssen, und habe es daher unter https://validator.w3.org versucht . Die Erklärung ist ziemlich nett. Es wird hervorgehoben, dass sogar URLs maskiert werden müssen. [PS: Ich denke, es wird sich entziehen, wenn es verbraucht wird, da die URL benötigt wird
&
. Kann jemand klarstellen?]quelle
&
startet der eine Entitätsreferenz. Nach dem Lesen&qux
findet der Parser kein endgültiges Semikolon (;
), sondern stößt auf ein Gleichheitszeichen (=
), das nicht Teil des Entitätsnamens sein kann. Dies sollte ein Analysefehler sein, wenn der Parser versucht hat, wirklich streng zu sein (gemäß HTML 4). In HTML 5 ist das Parsen von Entitäten insgesamt entspannter.;
aus diesem Grund im Allgemeinen am besten ist, Trennzeichen in Abfragezeichenfolgen zu verwenden (wenn Sie den Link steuern).Ja, Sie sollten versuchen, wenn möglich gültigen Code bereitzustellen.
Die meisten Browser korrigieren diesen Fehler stillschweigend, es gibt jedoch ein Problem, wenn Sie sich auf die Fehlerbehandlung in den Browsern verlassen. Es gibt keinen Standard für den Umgang mit falschem Code. Daher muss jeder Browserhersteller versuchen, herauszufinden, was mit jedem Fehler zu tun ist. Die Ergebnisse können variieren.
Einige Beispiele, bei denen Browser wahrscheinlich anders reagieren, sind das Einfügen von Elementen in eine Tabelle, jedoch außerhalb der Tabellenzellen, oder das Verschachteln von Links ineinander.
Für Ihr spezielles Beispiel ist es unwahrscheinlich, dass Probleme auftreten. Eine Fehlerkorrektur im Browser kann jedoch beispielsweise dazu führen, dass der Browser vom standardkonformen Modus in den Mackenmodus wechselt, wodurch Ihr Layout möglicherweise vollständig ausfällt.
Sie sollten also Fehler wie diesen im Code korrigieren, wenn nicht für irgendetwas anderes, um die Fehlerliste im Validator kurz zu halten, damit Sie schwerwiegendere Probleme erkennen können.
quelle
Vor ein paar Jahren haben wir den Bericht erhalten, dass eine unserer Web-Apps in Firefox nicht richtig angezeigt wurde. Es stellte sich heraus, dass die Seite ein Tag enthielt, das aussah
Bei einem wiederholten Stilattribut kombiniert der IE beide Stile, während Firefox nur einen davon verwendet, daher das unterschiedliche Verhalten. Ich habe das Tag in geändert
und sicher genug, es hat das Problem behoben! Die Moral der Geschichte ist, dass Browser mit gültigem HTML konsistenter umgehen als mit ungültigem HTML. Also, repariere dein verdammtes Markup schon! (Oder verwenden Sie HTML Tidy, um das Problem zu beheben.)
quelle
if
&
wird in html verwendet wird, sollten Sie es maskierenWenn
&
in Javascript-Zeichenfolgen verwendet wird, zalert('This & that');
oder document.href, müssen Sie es nicht verwenden.Wenn Sie document.write verwenden, sollten Sie es z
document.write(<p>this & that</p>)
quelle
document.write
sollte vermieden werden. Siehe das Warnfelddocument.write()
. Aber das Wichtigste, was Alex darüber macht, aus Skriptständen in das Dokument zu schreiben, imo. +1Dies hängt von der Wahrscheinlichkeit ab, dass ein Semikolon in Ihrer Nähe landet
&
und etwas ganz anderes anzeigt.Wenn Sie sich beispielsweise mit Eingaben von Benutzern befassen (z. B. wenn Sie den vom Benutzer bereitgestellten Betreff eines Forumsbeitrags in Ihre Titel-Tags aufnehmen), wissen Sie nie, wo sie zufällige Semikolons platzieren, und es werden möglicherweise zufällig seltsame Entitäten angezeigt. Also entkomme immer in dieser Situation.
Natürlich können Sie es für Ihr eigenes statisches HTML überspringen, aber es ist so trivial, das richtige Escape einzuschließen, dass es keinen guten Grund gibt, es zu vermeiden.
quelle
Wenn Sie wirklich über den statischen Text sprechen
in einer Datei auf der Festplatte gespeichert und direkt von einem Server bereitgestellt, dann ja: Es muss wahrscheinlich nicht maskiert werden.
Da gibt es aber sehr heutzutage wenig HTML-Inhalt gibt, der vollständig statisch ist, füge ich den folgenden Haftungsausschluss hinzu, der davon ausgeht, dass der HTML-Inhalt aus einer anderen Quelle generiert wurde (Datenbankinhalt, Benutzereingabe, Ergebnis des Webdienstaufrufs, Ergebnis der Legacy-API ,. ..):
Wenn Sie nicht ein einfaches entkommen
&
, dann sind die Chancen Sie auch nicht entgehen ein&
oder
oder<b>
oder<script src="http://attacker.com/evil.js">
oder andere ungültige Text. Das würde bedeuten, dass Sie Ihre Inhalte bestenfalls falsch anzeigen und mit größerer Wahrscheinlichkeit XSS-Angriffen ausgesetzt sind .Mit anderen Worten: Wenn Sie bereits die anderen problematischeren Fälle überprüfen und ihnen entkommen, gibt es fast keinen Grund, den nicht völlig kaputten, aber immer noch etwas fischigen Standalone- und Ausweichmanöver zu belassen.
quelle
Ich bin mir nicht sicher, ob dies für irgendjemanden nützlich ist ... Ich habe eine Weile dagegen gekämpft ... hier ist eine herrliche Regex, mit der Sie alle Ihre Links, Javascript und Inhalte reparieren können. Ich musste mich mit einer Menge Legacy-Inhalten auseinandersetzen, die niemand korrigieren wollte.
Fügen Sie dies zu Ihrer Render-Überschreibung auf Ihrer Masterseite oder Ihrem Steuerelement hinzu:
Bitte flamme mich nicht dafür, dass ich das an die falsche Stelle gebracht habe:
quelle
Die Verbindung hat ein ziemlich gutes Beispiel dafür , wann und warum Sie entkommen müssen
&
zu&
https://jsfiddle.net/vh2h7usk/1/
Interessanterweise musste ich dem Charakter entkommen, um ihn in meiner Antwort hier richtig darzustellen. Wenn ich die integrierte Codebeispieloption (über das Antwortfeld) verwenden würde, kann ich einfach eingeben
&
und es wird so angezeigt, wie es sollte. Aber wenn ich das<code></code>
Element manuell verwenden würde , müsste ich entkommen, um es richtig darzustellen :)quelle