【问题标题】:How to replace non-ASCII characters in a string in PHP?如何在 PHP 中替换字符串中的非 ASCII 字符?
【发布时间】:2014-08-11 06:05:27
【问题描述】:

我需要替换字符串中没有用单个字节表示的字符。

我的字符串是这样的

$inputText="centralkøkkenet kliniske diætister"; 

在那个字符串中有像 øæ 这样的字符。这些字符应该被替换。如何在可用于替换的正则表达式中提及这些?

【问题讨论】:

    标签: php html regex


    【解决方案1】:

    如果您想替换除字母数字和空格字符以外的所有内容,请尝试。

    [^a-zA-Z0-9 ]
    

    这里是demo

    示例代码:

    $re = "/[^a-zA-Z0-9 ]/";
    $str = "centralkøkkenet kliniske diætister";
    $subst = '';
    
    $result = preg_replace($re, $subst, $str);
    

    最好使用[^\w\s][\W\S] 使其简短而简单,正如@hjpotter92 以及在cmets 中所建议的那样。

    模式说明:

    [^\w\s]                any character except: word characters:
                            (a-z, A-Z, 0-9, _), whitespace (\n, \r, \t,\f, and " ")
    
    [\W\S]                 any character of: 
                             non-word characters (all but a-z, A-Z, 0-9, _), 
                             non-whitespace (all but \n, \r, \t, \f, and " ")
    

    【讨论】:

    • \w 也包括下划线。也是正确的
    • 我无法得到结果。我像这样使用$resultText = preg_replace('[^a-zA-Z0-9 ]', '', $inputText);。对吗?
    • 谢谢。它的工作。但它删除了字符串中的空间。我不想删除空格。我得到这样的输出 centralkkkenetkliniskeditister
    • 我不这么认为。我在正则表达式模式中添加了空格。查看模式中0-9 后面有空格或使用/[^a-zA-Z0-9\s]
    • 谢谢。工作正常。你没有在给定的代码中提到\s
    【解决方案2】:

    如果您还想保留标点符号,即:-'"!...,请使用这个:

    $text = 'central-køkkenet "kliniske" diætister!';
    $new = preg_replace('/[\x7F-\xFF]/ui', '', $text);
    echo $new,"\n";
    

    输出:

    central-kkkenet "kliniske" ditister!
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-13
      • 2015-02-27
      • 2013-09-08
      • 2013-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-14
      相关资源
      最近更新 更多