我正在使用http://validator.w3.org验证我的网站,并且在我的链接说明文字中有&
时出现问题。
这取自来源:
<a class='tag' href='/php/iphone software.php?function=developer&dev=witch%26wizards+inc.&store=143441'>witch&wizards inc.</a>
这会在验证器中出现此错误:
第188行,第540列:无法为通用实体“向导”生成系统标识符
... 6wizards + inc。&amp; store = 143441'&gt; witch&amp; wizards inc。
✉在文档中找到了实体引用,但没有定义该名称的引用
如果我对该描述进行了urlencode,则验证通过,但用户会看到显示的文本urlencoded,即
开发者女巫%26wizards + inc。
但是,如果显示未编码,即
,我相信它更加用户友好Developer witch&amp; wizards inc。
有没有办法通过验证,但仍然显示用户友好的文字?
答案 0 :(得分:8)
简单:
对于&符号作为查询字符串值的一部分,URL会将其编码为%26
。
用于将&符号显示为文本,或用于分隔查询字符串键值对<&strong>的&符号 - 换句话说,对于几乎所有其他内容 - HTML将它们编码为其实体 您的HTML应如下所示:&
。< / p>
<a class='tag' href='/php/iphone%20software.php?function=developer&dev=witch%26wizards+inc.&store=143441'>witch&wizards inc.</a>
答案 1 :(得分:2)
尝试使用&
而不是%26
答案 2 :(得分:1)
将网址中的&
编码为%26
,而不是&
(也将空格编码为%20
),并在显示的文字中对&
进行编码作为&
:
<a class='tag' href='/php/iphone%20software.php?function=developer%26dev=witch%26wizards+inc.%26store=143441'>witch&wizards inc.</a>
请注意,用于编码URLS的URL encoding和用于编码HTML中显示文本的HTML entities之间存在差异。例如,如果您想在HTML中显示文字<br/>
,则会将其编码为<br/>
,但在网址中则为%3Cbr%2F%3E
。
使用htmlentities()
将特殊字符编码为PHP中的HTML实体。