【问题标题】:I have a string with "\u00a0", and I need to replace it with "" str_replace fails我有一个带有“\u00a0”的字符串,我需要用“”替换它 str_replace 失败
【发布时间】:2011-02-05 06:09:28
【问题描述】:

我需要清理来自各种 Microsoft Office 套件应用程序(ExcelAccessWord)的字符串(复制/粘贴),每个应用程序都有自己的一组编码。

我将 json_encode 用于调试目的,以便能够查看每个编码的字符。

我可以用 str_replace 清理我目前找到的所有东西 (\r \n),但是用 \u00a0 我没有运气。

$string = 'mail@mail.com\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;mail@mail.com'; //this is the output from json_encode

$clean = str_replace("\u00a0", "",$string);

返回:

mail@mail.com\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;mail@mail.com

完全一样;它完全忽略了\u00a0。

有没有办法解决这个问题?另外,我觉得我在重新发明轮子,是否有一个函数/类可以完全去除每一种可能的编码的每一个可能的字符?

____编辑____

在前两个回复之后,我需要澄清我的示例确实有效,因为它是 json_encode 的输出,而不是实际的字符串!

【问题讨论】:

    标签: php encoding str-replace


    【解决方案1】:

    通过在包含 \u00a0 的字符串上将 ord()substr() 结合起来,我发现以下诅咒有效:

    $text = str_replace( chr( 194 ) . chr( 160 ), ' ', $text );
    

    【讨论】:

    • 谢谢!这为我节省了很多时间。 "\xc2\xa0" 也可以。
    • 是的,对我有用。我正在尝试从具有法语文本的站点中删除数据..
    【解决方案2】:

    试试这个:

    $str = str_replace("\u{00a0}", ' ', $str);
    

    【讨论】:

    • 我认为你误解了这个问题。
    • 谢谢。这是正确的表示法:php.net/manual/en/… 替换 Unicode 时。 OP 的问题是关于文字 \u00a0 字符串,但这就是我所追求的
    • 这是唯一适合我的。
    【解决方案3】:

    当我复制/粘贴您的代码时,对我有用。尝试用单引号替换 str_replace() 中的双引号,或转义反斜杠 ("\\u00a0")。

    【讨论】:

    • 在您的示例中它有效,因为您使用的是 json_encode 的输出而不是实际的字符串!如果我复制粘贴我的代码,它甚至对我来说也能完美运行。
    • 如果替换 \xa0 而不是 \u00a0 会发生什么?
    • 发生这种情况。它确实删除了 \u00a0 的实例,当从 json_encode 打印时它看起来没问题,但是如果我在没有 json 编码的情况下回显字符串,我会得到一个�之前有 \u00a0 的位置。在这一点上我无法理解发生了什么..请给我一个解释! :-)
    • 我找到了解决方案,只需将 json_encode 分配给一个变量,然后 str_replace 就像没有明天一样。如果可以的话,我很想了解有关 \xa0 的噱头..
    • 这可能是一个空字符...转义字符\u00a0 表示“十六进制值为00a0 的unicode 字符”。我最初的建议只会去掉 a0 段。尝试用空白字符串替换 \x00a0。
    【解决方案4】:

    我也遇到了同样的问题。显然 PHP 的 json_encode 将为任何带有“不间断空格”的字符串返回 null。

    解决办法是把这个换成普通的空格:

    str_replace(chr(160),' ');
    

    我希望这对某人有所帮助 - 我花了一个小时才弄清楚。

    【讨论】:

      【解决方案5】:

      这个也可以,我在某个地方找到的

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

      【讨论】:

      • 什么鬼!这是在我的情况下唯一有效的答案。想解释一下解决方案吗?
      • 现在不记得了:P
      【解决方案6】:

      一个小问题:\u00a0 实际上是一个不间断的空格字符,c.f. http://www.fileformat.info/info/unicode/char/a0/index.htm

      所以用" "替换它可能更正确

      【讨论】:

        【解决方案7】:

        这对我有用:

        $str = preg_replace( "~\x{00a0}~siu", " ", $str );
        

        【讨论】:

          【解决方案8】:

          你必须用这样的单引号来做到这一点:

          str_replace('\u00a0', "",$string);
          

          或者,如果您喜欢使用双引号,则必须转义反斜杠 - 如下所示:

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

          【讨论】:

          • 我也遇到了这个问题。这是对我有用的解决方案。我将带有已知 \u00a0 字符的字符串复制到我的编辑器中,然后复制 \u00a0 表示的“空格”并将其粘贴到 str_replace 函数中。最后它看起来像这样:str_replace(" ","",$string)。第一个参数中的空格是非标准的\u00a0。现在通过 json_encode 运行它。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-19
          • 2013-07-11
          • 2014-03-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多