我有一个页面,可以从数据库中生成我的产品列表。然后输出名称,但许多名称都有&在他们中。 w3c验证员告诉我:
第157行,第66列:字符“&”是分隔符的第一个字符,但是作为数据出现
我应该使用&
代替。
我能做些什么吗?我需要改变所有&在数据库中“&”?
答案 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中的特殊字符,因此如果您需要文字符号,则应为&
。 htmlspecialchars()
将转义字符串中的所有特殊字符,因此可以安全地显示在网页上。
答案 3 :(得分:0)
表示&amp;的正确方法在XML中使用实体&
。您不一定需要在数据库中替换它们,但在将数据表示为XML或HTML之前,您需要在某处替换它们。
答案 4 :(得分:0)
请勿在数据库中更改它。在输出之前立即更改它。在数据库中更改它会使您假定您的目标是HTML输出环境。如果您定位其他内容,例如生成PDF或其他文件,那么现在您必须删除&
- &gt; &
转化。
始终以基本的“原始”格式存储数据,并根据需要转换目标环境。
答案 5 :(得分:0)
我假设你只是从数据库中获取一个列表,然后通过它循环输出到一个页面。如果是这样,你可以做的是当你从数据库中取回字段时,在该字段上替换字符串以替换&amp;使用该特殊字符的html名称&amp;放大器; (没有空格)
在php中它应该是str_replace(“&amp;”,“&amp; amp;”)的内容,请查看php.net上的php页面
所有不同的参数和用法。