我已经读了几个小时了,我无法完全理解编码问题。我正在使用PHP指定字符集=utf-8。我希望能够输入某些字符,例如项目符号•和箭头⇒进入文本区域。我直接保存到mySQL数据库中,符号正确存储在那里。为了显示数据库中保存的文本,我调用以下函数来翻译文本区域的存储符号。
function htmlspecialchars2($string, $flags=ENT_NOQUOTES){
$string = htmlspecialchars($string, $flags); // to help prevent code injection
$string = str_replace(chr(149), "•", $string); // converts bullet to html
$string = str_replace("⇒", "⇒",$string); // don't know the ascii code for the arrow
return $string;
}
这对子弹有效,但对箭无效。关于如何保存(然后重新显示)扩展HTML字符的任何建议。我读了我能找到的所有东西,但缺少了一些东西。
您可能正在查找htmlentities
。这应该将所有具有HTML字符实体等效项的字符转换为HTML实体(使用html_entity_decode
进行反向转换)。
PS:在我的系统上,htmlentities('⇒', ENT_COMPAT, 'UTF-8')
返回⇒
对于下面的任何人,该解决方案都有两部分
1) 正如One Trick Pony(谢谢!)所提到的那样,需要htmlentities,这才是真正的答案。
2) 然而,另一半需要显式地设置会话的编码。mysqli_set_charset($link,"utf8");
注意:新代码要简单得多。我可以简单地调用htmlentities($string,ENT_NOQUOTES,'UTF-8')