【问题标题】:PHP utf8_encode() converts spaces to non-breaking spaces [closed]PHP utf8_encode() 将空格转换为不间断空格 [关闭]
【发布时间】:2011-08-16 21:23:15
【问题描述】:

非常简单:utf8_encode($string) 用不间断空格(“\u00a0”)替换常规空格。我尝试使用 str_replace 过滤结果:

str_replace("\u00a0", " ", utf8_encode($string))

但这并没有解决问题。

编辑:叹息,我是个白痴。 utf8_encode() 也不是问题。我以为我正在使用该功能,忘记了我在代码中禁用了它。我的数据正在通过 json_encode() 运行 AJAX 请求。 json_encode() 有问题吗?我担心我可能会因滥用 Stack Overflow 而感到内疚。我会尝试用谷歌搜索它。

最终编辑:问题出在数据本身,它是从 Word 文档复制到 MySQL 表中的。所有空格都被复制为不间断空格。很抱歉浪费了大家的时间。

【问题讨论】:

  • 问题是,我怎样才能找回我的常规空间?
  • 如果字符串是 UTF-8 编码的,则必须替换相应的代码单元序列,而不是代码点值本身。
  • 您的意见是什么? 0xA0 也是 ISO 8859-1 中的不间断空格。

标签: php unicode utf-8


【解决方案1】:

str_replace("\u00a0", "", utf8_encode($dat))。但这并没有解决问题。

PHP 只有字节字符串,没有原生 Unicode 字符串;因此,没有\u 转义,您实际上是在要求它转换输入中的反斜杠字母u 序列。

要摆脱不间断的空格字符,您必须替换掉 \xA0(如果在传递给 utf8_encode 之前可能拥有的 ISO-8859-1 数据完成)或 \xC2\xA0(如果完成转码为 UTF-8 后)。

utf8_encode 仅将 ISO-8859-1 转码为 UTF-8,它不涉及空格,所以我怀疑您的实际数据中有不间断的空格字符。

【讨论】:

    【解决方案2】:

    试试这个

    $str = trim($str, chr(0xC2).chr(0xA0))
    

    【讨论】:

      【解决方案3】:

      json_decode 错误,导致非破坏空间 (\xc2\xa0)

      在 json_decoding 之前,执行此操作 ...

           $data = str_replace("\xc2\xa0",'',$data)
           $json = json_decode($data);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-11
        • 2011-02-05
        • 2013-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多