[英]Html Entities in <a href=
我的MySQL数据库有一些有时包含撇号的字段,因此我要对html实体进行编码。 例如,“ Cote d'Or”作为“ Cote d&039; Or”存储在数据库中。
当MySQL查询填充href时,我的源代码中会得到类似的内容。
<a href="/page.php?location=Cote d&039;Or">Text link</a>
但是,当我单击链接时,出现403“ Forbidden”错误。 检查时,将鼠标悬停在链接上表示它读为&039;。 作为撇号。 这似乎是页面错误的原因,因为将撇号放在数据库中会产生相同的错误,并且其中什么也无法正常工作。
我现在的问题是,如何在数据库中拥有html实体,并且仍然可以使链接正常工作?
对于URL,您不希望使用htmlentities()
来显示HTML。
相反,您将要使用urlencode()
:
$link = '/page.php?location=' . urlencode($location);
如果您的数据已经HTML编码,则需要先对其进行解码,然后再将其传递给urlencode()
。 一个好的函数是html_entity_decode()
:
$location = html_entity_decode($row['location']);
$link = '/page.php?location=' . urlencode($location);
使用filter_var($var, FILTER_SANITIZE_URL)
可能会更好
虽然不是最佳方法,但由于您使用的是htmlentities()
,因此可以使用html_entity_decode()
来自: http : //php.net/html_entity_decode
html_entity_decode()与htmlentities()相反,它可以将字符串中的所有HTML实体转换为它们的适用字符。
好吧,事实证明,真正的问题不是html实体。 这是一些写入Apache的安全性内容。 与我的托管公司打个招呼,他们做了一些使一切正常的工作(大概删除了mod_security规则)。
故事的寓意:如果遇到403错误,请首先怀疑Apache安全性。
感谢你们提供的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.