1

我已经阅读了几个小时,但我无法完全解决编码问题。我正在使用 PHP 指定 charset=utf-8。我希望能够在文本区域中输入某些字符,例如项目符号• 和箭头⇒。我直接保存到 mySQL 数据库,符号正确存储在那里。为了显示数据库中保存的文本,我调用以下函数来翻译文本区域的存储符号。

function htmlspecialchars2($string, $flags=ENT_NOQUOTES){
$string = htmlspecialchars($string, $flags);    // to help prevent code injection
$string = str_replace(chr(149), "&#8226", $string);  // converts bullet to html
$string = str_replace("⇒", "&#8658",$string);   // don't know the ascii code for the arrow
return $string;
}

这适用于子弹,但不适用于箭头。关于如何保存(然后重新显示)扩展 HTML 字符的任何建议。我已经阅读了我能找到的所有内容,但缺少一些东西。

4

2 回答 2

2

您可能正在寻找htmlentities. 这应该将所有具有 HTML 字符实体等效项的字符转换为 HTML 实体(以反转使用html_entity_decode)。


PS:在我的系统上,htmlentities('⇒', ENT_COMPAT, 'UTF-8')返回⇒

于 2013-02-24T00:24:07.847 回答
1

对于接下来的任何人,解决方案有 2 个部分

1) One Trick Pony 提到需要 htmlentities (谢谢!),这才是真正的答案。

2) 但是,另一半需要显式设置会话的编码。mysqli_set_charset($link, "utf8");

注意:新代码要简单得多。我可以简单地调用 htmlentities($string, ENT_NOQUOTES, 'UTF-8') 而不是调用上面所示的特殊函数 htmlspecialchars2()

于 2013-02-24T02:02:57.020 回答