代码之家  ›  专栏  ›  技术社区  ›  Andrey

\在PHP preg\u replace中,w只覆盖UTF-8字符的第二个字节

  •  2
  • Andrey  · 技术社区  · 15 年前

    我们有以下代码:

    $value = preg_replace("/[^\w]/", '', $value);
    

    $value 在utf-8中。在这个转换之后,多字节字符的第一个字节被剥离。如何完全覆盖UTF-8字符?

    5 回复  |  直到 12 年前
        1
  •  1
  •   user35288 user35288    15 年前
        2
  •  6
  •   Gordon Haim Evgi    15 年前

    try with the /u modifier :

    这个修饰符打开与Perl不兼容的PCRE的附加功能。模式字符串被视为UTF-8。此修饰符可从Unix上的PHP4.1.0或更高版本以及win32上的PHP4.2.3获得。从php4.3.5开始检查模式的UTF-8有效性。

    如果不行,试试看

    相反。

        3
  •  4
  •   soulmerge    15 年前

    u modifier to pcre patterns in PHP . 它声明regex是用UTF8编码的,但是我发现它处理 输入

        4
  •  2
  •   Anthony    10 年前

    追加 u

    $value = preg_replace("/[^\w]/u", '', $value);
    

    推论

    在最后期限前遇到问题。因此,要将任何内容转换为UTF-8(并删除任何不可转换的垃圾),我们首先使用:

    $value = iconv( 'ISO-8859-1', 'UTF-8//IGNORE//TRANSLIT', $i );
    

    因为所有的东西都可以被编码成ISO-8859-1(即使一些模糊的字符出现错误),而且由于大多数浏览器都是在8859中运行的(除非被告知使用UTF-8),我们发现这个函数是一个通用的、安全的、有效的方法,可以“接收任何东西、丢弃任何垃圾,并转换成UTF-8”。

    从5.3.0开始,mbèeregè就不推荐使用了,因此使用这些函数不是正确的方法。

        5
  •  0
  •   codaddict    15 年前

    [^\w]+ [^\w]

    \W [^\w]