防止对现有HTML实体进行编码(转换为&至& to& to& amp; amp;)

时间:2015-09-25 13:56:52

标签: php html mysql

我的mysql数据库表中的数据有'&'等特殊字符。

使用时我需要将它们转换为&。我使用htmlspecialchars将它们转换为HTML实体。

但是很少有条目已经包含&并且它们将它们转换为&我需要它们在没有转换的情况下使用它。

怎么办?

2 个答案:

答案 0 :(得分:4)

我认为最好的解决方案是先解码它们。普通&将保持不变,但&将被解码为&

然后再次对它们进行编码,将&和其他特殊字符转换为其编码的等效字符。代码比解释短。 :)

$text = 'Your text with &s from the database';
// Decode and re-encode the special characters.
$text = htmlspecialchars(htmlspecialchars_decode($text));

如果您还有其他实体(例如é的{​​{1}}),而不是é,您还可以使用htmlspecialcharshtmlentities 。解决方案是相同的,但您可以测试哪一个产生最佳结果。

html_entity_decode

$text = 'Your text with &s from the database'; // Decode and re-encode the special characters and other entities. $text = htmlentities(html_entity_decode($text)); htmlspecialchars都支持htmlentities参数,默认情况下为true,但可以设置为false。这也应该防止双重编码。听起来这个解决方案更清晰,但我没有使用它,我不知道它是否有任何副作用。

答案 1 :(得分:0)

我更喜欢将纯文本存储在数据库中。

&安培;留下来,é留下等等......

只有在从DB读取“汇编”HTML内容时,才使用htmlspecialchars()。

这样我知道存储的内容可以在任何地方使用,无论它是html还是文本。