繁体   English   中英

的HTML实体

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM