我的mysql数据库表中的数据有'&'等特殊字符。
使用时我需要将它们转换为&
。我使用htmlspecialchars将它们转换为HTML实体。
但是很少有条目已经包含&
并且它们将它们转换为&
我需要它们在没有转换的情况下使用它。
怎么办?
答案 0 :(得分:4)
我认为最好的解决方案是先解码它们。普通&
将保持不变,但&
将被解码为&
。
然后再次对它们进行编码,将&
和其他特殊字符转换为其编码的等效字符。代码比解释短。 :)
$text = 'Your text with &s from the database';
// Decode and re-encode the special characters.
$text = htmlspecialchars(htmlspecialchars_decode($text));
如果您还有其他实体(例如é
的{{1}}),而不是é
,您还可以使用htmlspecialchars
和htmlentities
。解决方案是相同的,但您可以测试哪一个产生最佳结果。
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还是文本。