【问题标题】:Saving special characters in php在php中保存特殊字符
【发布时间】:2013-02-24 00:09:14
【问题描述】:

我已经阅读了几个小时,但我无法完全解决编码问题。 我正在使用 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 字符的任何建议。我已经阅读了我能找到的所有内容,但缺少一些东西。

【问题讨论】:

  • 为什么不直接使用 htmlspecialchars 的 charset 参数?
  • 试试utf8_decode()??

标签: php html ascii special-characters


【解决方案1】:

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


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

【讨论】:

  • 当我使用 $string = htmlentities($string, ENT_COMPAT, 'UTF-8') 时,文本区域为空白。如果我使用上面的代码(只有箭头),它将显示箭头。
  • string '' (length=0) 
    ---没有'UTF-8'参数,它显示所有的文本,但箭头为一个
  • 您可能在将 UTF-8 字符串传递给htmlentities之前更改了它
  • 我已经仔细检查了 - 字符串直接来自数据库,其列是 utf8_general_ci (尽管出于某种奇怪的原因该表位于 latin1_swedish_ci
  • 在上面使用mb_detect_encoding,看看会打印什么
【解决方案2】:

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

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

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

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

,而不是调用上面所示的特殊函数 htmlspecialchars2()

【讨论】:

    猜你喜欢
    • 2017-02-03
    • 2015-04-19
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    相关资源
    最近更新 更多