【问题标题】:PHP UTF-16 to ASCII conversionPHP UTF-16 到 ASCII 转换
【发布时间】:2009-07-28 21:26:01
【问题描述】:

考虑以下字符串。它以 UTF-16-LE 编码并保存到 PHP 变量中。我无法让 mbstring 或 iconv 用单引号替换 '。什么是净化它的好方法。

字符串:Carl Sagan's 宇宙连接

【问题讨论】:

  • 解决了。使用 mb_convert_encoding 只是一个小的变化而不是 UTF-16-LE => UTF-16 并且输出编码设置为 PHP 的内部 UTF-8 而不是 ASCII (ISO-8859)。

标签: php encoding utf-16


【解决方案1】:

除非我误解了这个问题,否则' 不是 UTF-16 问题。该字符串上运行了htmlspecialchars() 或htmlentities(),并且单引号被转换为html 实体表示'。

要使其恢复正常,您需要发送html_entity_decode()。

通常您只想在输出时进行 html 编码,以避免持续进行这种转换。如果您在某处接收 HTML 输入以获取此类字符串,您可能希望在进行 UTF 转换和存储之前解码实体。

【讨论】:

  • 嘿,感谢您的回复,但它没有这样做。即使是简单的 str_replace 也无法工作,这导致我得出上述结论。
  • 对带有字符串函数的 UTF-16 的支持非常低。我猜您将不得不将您的 UTF-16 字符串转换为可以由 html_entity_decode() 处理的编码。像$str = html_entity_decode(iconv('UTF-16','UTF-8',$str),ENT_QUOTES,'UTF-8'); 这样的东西。然后,如果需要,您可以转换回 UTF-16。我不确定所有这些转换是否适合您的目的,但我的直觉是您无法使用基本字符串函数在 UTF-16 上进行操作。
  • @zombat,为iconv 小费+1。这正是我所缺少的。
猜你喜欢
  • 2010-12-02
  • 2021-01-30
  • 2011-07-18
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
  • 2020-01-29
  • 2015-09-21
相关资源
最近更新 更多