链接描述文本中的&符号?

时间:2011-01-01 17:40:50

标签: php urlencode

我正在使用http://validator.w3.org验证我的网站,并且在我的链接说明文字中有&时出现问题。

这取自来源:

<a class='tag' href='/php/iphone software.php?function=developer&amp;dev=witch%26wizards+inc.&amp;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。

有没有办法通过验证,但仍然显示用户友好的文字?

3 个答案:

答案 0 :(得分:8)

简单:

对于&符号作为查询字符串的一部分,URL会将其编码为%26

用于将&符号显示为文本,或用于分隔查询字符串键值对<&strong>的&符号 - 换句话说,对于几乎所有其他内容 - HTML将它们编码为其实体&amp;。< / p>

您的HTML应如下所示:

<a class='tag' href='/php/iphone%20software.php?function=developer&amp;dev=witch%26wizards+inc.&amp;store=143441'>witch&amp;wizards inc.</a>

答案 1 :(得分:2)

尝试使用&amp;而不是%26

编辑:哇,&amp; amp;在SO上扩展。

答案 2 :(得分:1)

将网址中的&编码为%26,而不是&amp;(也将空格编码为%20),并在显示的文字中对&进行编码作为&amp;

<a class='tag' href='/php/iphone%20software.php?function=developer%26dev=witch%26wizards+inc.%26store=143441'>witch&amp;wizards inc.</a>

请注意,用于编码URLS的URL encoding和用于编码HTML中显示文本的HTML entities之间存在差异。例如,如果您想在HTML中显示文字<br/>,则会将其编码为&lt;br/&gt;,但在网址中则为%3Cbr%2F%3E

使用htmlentities()将特殊字符编码为PHP中的HTML实体。