Har*_*ldo 194 html validation html5 utf-8 character-encoding
我&
在我的网站上使用带有HTML5和UTF-8的符号<title>
.Google在其SERP上显示的&符号很好,其标题中的所有浏览器也是如此.
http://validator.w3.org给了我这个:
并没有开始角色参考.(可能应该被转义为
&
.)
我真的需要做&
吗?
我并不是为了验证我的页面而感到困惑,但是我很想听听人们对此的看法,以及它是否重要以及为什么.
Del*_*ani 136
是.正如错误所说,在HTML中,属性是#PCDATA,意味着它们被解析.这意味着您可以在属性中使用字符实体.单独使用&
是错误的,如果不是对于宽松的浏览器而且这是HTML而不是XHTML这一事实会破坏解析.只是逃避它&
,一切都会好起来的.
HTML5允许您将其保留为非转义状态,但仅限于后面的数据看起来不像有效的字符引用.但是,最好只是逃避这个符号的所有实例而不是担心哪些应该是哪些以及哪些不需要.
记住这一点; 如果你没有转义和转发,那么你创建的数据(代码很可能无效)就足够了,你也可能无法转义标记分隔符,这对于用户提交的数据来说是个大问题,这很可能导致HTML和脚本注入,cookie窃取和其他漏洞利用.
请逃避你的代码.它将在未来为您节省很多麻烦.
Ric*_*uen 52
除了验证之外,事实仍然是编码某些字符对于HTML文档很重要,因此它可以作为网页正确,安全地呈现.
编码&
为&
在任何情况下,对我来说,是生活的,减少错误和失败的可能性更简单的规则.
比较以下内容:哪个更容易?哪个更容易开玩笑?
(请带一粒盐;))
volt & amp
amp&volt
volt&
??
Mat*_*ens 31
我对此进行了彻底研究,并在此处写了我的发现:http://mathiasbynens.be/notes/ambiguous-ampersands
我还创建了一个在线工具,您可以使用它来检查您的标记是否有歧义的符号或不以分号结尾的字符引用,这两个都是无效的.(目前没有HTML验证程序正确执行此操作.)
Mat*_*son 19
HTML5规则与HTML4不同.HTML5中不需要它 - 除非&符号看起来像是启动参数名称."© = 2"仍然是一个问题,例如,因为© 是版权符号.
然而,在我看来,根据以下文本决定编码或不编码是更难的工作.所以最简单的路径可能就是一直编码.
Rya*_*nal 14
我认为这更像是一个"当浏览器不在乎时为什么遵循规范"的问题.这是我的一般答案:
标准不是"现在"的东西.它们是"未来"的东西.如果我们作为开发人员遵循Web标准,那么浏览器供应商更有可能正确地实现这些标准,并且我们更接近完全可互操作的Web,其中不需要CSS攻击,特征检测和浏览器检测.我们不必弄清楚为什么我们的布局在特定浏览器中中断,或者如何解决这个问题.
具体来说,如果HTML5不需要使用& 在您的特定情况下,您正在使用HTML5文档类型(并期望您的用户使用符合HTML5的浏览器),那么没有理由这样做.
在 HTML 中,a&
标记引用的开始,无论是字符引用还是实体引用。从那时起,解析器需要一个#
表示字符引用的实体名称,或者表示实体引用的实体名称,两者后跟一个;
. 这是正常的行为。
但是,如果引用名称或仅引用开头&
后跟一个空格或其他分隔符,如"
, '
, <
, >
, &
,则结尾;
甚至表示普通的引用&
都可以省略:
<p title="&">foo & bar</p>
<p title="&">foo & bar</p>
<p title="&">foo & bar</p>
Run Code Online (Sandbox Code Playgroud)
只有在这些情况下,结尾;
甚至引用本身才能被省略(至少在 HTML 4 中)。我认为 HTML 5 需要结尾;
.
但是规范建议始终使用像字符引用&
或实体引用这样的引用&
以避免混淆:
作者应该使用“
&
”(ASCII 十进制 38)而不是“&
”,以避免与字符引用的开头(实体引用开放分隔符)混淆。作者还应该&
在属性值中使用“ ”,因为在 CDATA 属性值中允许字符引用。
更新(2020 年 3 月): W3C 验证器不再抱怨转义 URL。
\n我正在检查为什么图像URL 需要转义,因此在https://validator.w3.org中进行了尝试。这个解释非常好。它强调甚至 URL 也需要转义。[PS:我猜它在使用时不会被转义,因为 URL 需要&
. 谁能解释一下吗?]
<img alt="" src="foo?bar=qut&qux=fop" />\n
Run Code Online (Sandbox Code Playgroud)\n\n\n在文档中找到实体引用,但\n没有定义该名称的引用。这通常是由于引用名称拼写错误、未编码的 & 符号或遗漏尾部分号 (;) 造成的。导致此错误的最常见原因是 URL 中的 & 符号\n未编码,如 WDG 在“URL 中的 & 符号”中所述。实体引用以与号 (&) 开头,并以分号 (;) 结尾。如果您想在文档中使用文字与符号\n您必须将其编码为“&”(即使在 URL 内!)。请小心以分号结束实体引用,否则您的实体引用可能会与以下文本相关联而被解释。另请记住\n命名实体引用区分大小写;&Aelig; 和 \xc3\xa6\n 是不同的字符。如果此错误出现在由 PHP 会话处理代码生成的某些标记中,本文提供了针对您的问题的解释和解决方案。
\n
好吧,如果它来自用户输入,那么绝对是的,原因很明显.想想这个网站是不是这样做了:这个问题的标题会出现,我真的需要将'&'编码为'&'吗?
如果它只是像echo '<title>Dolce & Gabbana</title>';
严格说来你不必要的东西.它会更好,但如果你不这样做,用户就不会注意到差异.
你能告诉我们你的title
实际情况吗?当我提交
<!DOCTYPE html>
<html>
<title>Dolce & Gabbana</title>
<body>
<p>am i allowed loose & mpersands?</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
到http://validator.w3.org/ - 明确要求它使用实验性HTML 5模式 - 它没有关于&
s ...的抱怨
归档时间: |
|
查看次数: |
338102 次 |
最近记录: |