2013-02-24 102 views
1

我一直在阅读几个小时,并且无法完全解决编码问题。我使用PHP 指定charset = utf-8。 我希望能够输入某些字符,例如子弹•和箭头⇒进入textarea。 我直接保存到mySQL数据库,并且符号被正确存储在那里。 要显示数据库中保存的文本,我调用以下函数来转换textarea的存储符号。在php中保存特殊字符

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字符。我已经阅读了所有我能找到的东西,但我错过了一些东西。

+0

为什么不直接使用htmlspecialchars的charset参数? – mario 2013-02-24 00:18:59

+0

尝试'utf8_decode()'? – michi 2013-02-24 00:20:59

回答

2

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


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

+0

当我使用$ string = htmlentities($ string,ENT_COMPAT,'UTF-8')时,textarea为空。如果我使用上面的代码(只有箭头),它会显示箭头。 – mseifert 2013-02-24 00:40:00

+0

做'var_dump($ string)'? – 2013-02-24 00:44:12

+0

string''(length=0) 
---如果没有'UTF-8'参数,它会显示所有文本,但箭头显示为 – mseifert 2013-02-24 00:48:39

1

对于任何人后面,该解决方案必须需要2份

1)ヶ辆因一米招的小马(自提谢谢)!这是真正的答案。

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

注意:新代码要简单得多。如上所示,我可以简单地调用htmlentities($ string,ENT_NOQUOTES,'UTF-8')