我已经读了好几个小时了,我无法完全绕过编码问题。 我正在使用PHP 指定charset = utf-8。 我希望能够输入某些字符,例如子弹•和箭头⇒进入textarea。 我直接保存到mySQL数据库,并在那里正确存储符号。 要显示数据库中保存的文本,我调用以下函数来翻译textarea的存储符号。
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字符的任何建议。我已经阅读了所有我能找到的东西,但我遗漏了一些东西。
答案 0 :(得分:2)
你可能正在寻找htmlentities
。这应该将具有HTML字符实体等价物的所有字符转换为HTML实体(以反转使用html_entity_decode
)。
PS:在我的系统上,htmlentities('⇒', ENT_COMPAT, 'UTF-8')
返回⇒
答案 1 :(得分:1)
对于任何跟随的人,解决方案有两部分
1)One Trick Pony(谢谢你)提到的需要很多,这才是真正的答案。
2)但是,另一半需要明确设置会话的编码。 mysqli_set_charset($ link,“utf8”);
注意:新代码更简单。我没有调用上面显示的特殊函数htmlspecialchars2(),而只是调用htmlentities($ string,ENT_NOQUOTES,'UTF-8')