【问题标题】:PHP : preg_replace function for replace unicode chracters with range in a stringPHP:preg_replace 函数,用于用字符串中的范围替换 unicode 字符
【发布时间】:2014-01-23 08:46:48
【问题描述】:

我想从字符串中删除一组字符。我正在使用 preg_replace 将 unicode 字符替换为空白。

我有一些 Unicode 字符范围。

它适用于以下代码。

$output = "Clean :this; [cnv\al?id@ non AS]CII äóchar^acters.";
$output = preg_replace('/[\x00-\x1F]|[\x21-\x2C]|[\x3A-\x40]|[\x5B-\x5E]|[\x7B-\x7D]|[\x80-\xBF]|[\x2B0-\x36F]/','', $output); 
echo $output; 

但它给出了以下代码的错误。

$output = "Clean :this; [cnv\al?id@ non AS]CII äóchar^acters."; 
$output = preg_replace('/[\x00-\x1F]|[\x21-\x2C]|[\x3A-\x40]|[\x5B-\x5E]|[\x7B-\x7D]|[\x80-\xBF]|[\x2B0-\x36F]|[\x2000-\x2BFF]|[\x2E00-\x2E7F]|[\x3000-\x303F]|[\x1D000-\x1D24F]|[\x1F600-\x1F77F]|[\x1F000-\x1F0FF]/','', $output); 
echo $output; 

错误:- preg_replace():编译失败:偏移量 97 处的字符类范围乱序

我可以使用 for 循环从字符串中删除 unicode 字符。所以我需要运行循环以获得更大的范围。

您能否建议我在上面的代码中哪个更好?是for循环还是preg_replace?如果 preg_replace 更好,则需要解决上述错误。

【问题讨论】:

    标签: php unicode preg-replace


    【解决方案1】:

    您的问题是\x 只接受两位数,因此您需要添加大括号,例如:

    $output = "Clean :this; [cnv\al?id@ non AS]CII äóchar^acters."; 
    $output = preg_replace('/[\x00-\x1F]|[\x21-\x2C]|[\x3A-\x40]|[\x5B-\x5E]|[\x7B-\x7D]|[\x80}-\xBF]|[\x{2B0}-\x{36F}]|[\x{2000}-\x{2BFF}]|[\x{2E00}-\x{2E7F}]|[\x{3000}-\x{303F}]|[\x1{D000}-\x{1D24F}]|[\x{1F600}-\x{1F77F}]|[\x{1F000}-\x{1F0FF}]/u','', $output); 
    

    -您还需要将u 修饰符添加到您的正则表达式中。

    【讨论】:

      猜你喜欢
      • 2016-07-02
      • 2018-08-26
      • 2012-12-05
      • 1970-01-01
      • 2011-04-15
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      相关资源
      最近更新 更多