&安培;产品名称中的字符导致验证错误

时间:2011-12-08 14:36:44

标签: php mysql validation

我有一个页面,可以从数据库中生成我的产品列表。然后输出名称,但许多名称都有&在他们中。 w3c验证员告诉我:

第157行,第66列:字符“&”是分隔符的第一个字符,但是作为数据出现

我应该使用&代替。

我能做些什么吗?我需要改变所有&在数据库中“&”?

6 个答案:

答案 0 :(得分:4)

如果这是来自数据库的输出内容,您应该在将这些变量写入HTML之前将这些变量包装在htmlentites()htmlspecialchars()中。

echo htmlspecialchars($productname);

&符号&必须写为实体&。您需要准备许多其他类似的实体或特殊字符,并且上述功能可以处理它们。

此外,比起W3C验证更重要的是,如果您有任何用户生成的内容(如用户评论等),htmlspecialchars()将提供针对跨站点脚本攻击的保护。

$product = "Eggs & Bacon";
echo htmlspecialchars($product);
// Eggs & Bacon

答案 1 :(得分:1)

更改&到& - 即将其转义为HTML

<强>更新

您还应该考虑其他字符,例如&lt;,&gt;,“,...

查看这些字符的规格 - 谷歌吧!

答案 2 :(得分:1)

您应该将所有数据传递到htmlspecialchars(),然后再将其传回网页。

&是HTML中的特殊字符,因此如果您需要文字符号,则应为&amp;htmlspecialchars()将转义字符串中的所有特殊字符,因此可以安全地显示在网页上。

答案 3 :(得分:0)

表示&amp;的正确方法在XML中使用实体&amp;。您不一定需要在数据库中替换它们,但在将数据表示为XML或HTML之前,您需要在某处替换它们。

答案 4 :(得分:0)

请勿在数据库中更改它。在输出之前立即更改它。在数据库中更改它会使您假定您的目标是HTML输出环境。如果您定位其他内容,例如生成PDF或其他文件,那么现在您必须删除& - &gt; &amp;转化。

始终以基本的“原始”格式存储数据,并根据需要转换目标环境。

答案 5 :(得分:0)

我假设你只是从数据库中获取一个列表,然后通过它循环输出到一个页面。如果是这样,你可以做的是当你从数据库中取回字段时,在该字段上替换字符串以替换&amp;使用该特殊字符的html名称&amp;放大器; (没有空格)

在php中它应该是str_replace(“&amp;”,“&amp; amp;”)的内容,请查看php.net上的php页面

所有不同的参数和用法。