【问题标题】:PHP remove symbols from stringPHP从字符串中删除符号
【发布时间】:2013-05-19 23:29:05
【问题描述】:

通过互联网和这个网站搜索,我发现了几个关于这个问题的主题。问题是,如果插入的字符串必须仅包含拉丁字母的字符,则有无数的解决方案,但是当案例需要其他字母的文本时,它会变得有点棘手。

有什么方法可以在 PHP 中去除字符串中的所有符号,但保留所有 UTF-8 字母表的实际字母?我已经尝试创建一个包含键盘所有字符的数组,然后使用 str_replace 或 preg_replace 删除它们,但后来我发现不同的国家有时也有不同的键盘,其中包含不同的符号。例如,我的 qwerty 键盘没有英国键盘可能有的 £ 符号。

我知道这是一个奇怪的问题,我只是想知道是否有一个我可能错过的简单解决方案。

任何帮助将不胜感激!

编辑: 好的 经过一些更好和扩展的 Google-ing 之后,我发现以下正则表达式可以很好地满足我的需要,它保留了所有类型的字母表中的所有字母,同时删除了所有符号。我在这里分享它以防其他人需要这样做。

$string = preg_replace('/[^\p{L}\p{N}\s]/u', '', $string);

【问题讨论】:

    标签: php string symbols


    【解决方案1】:
    $string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
    
    $string = preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.
    
    echo $string; // output will be abcdef-g for 'a|"bc!@£de^&$f g'
    

    【讨论】:

    • 是的。但我需要的是允许所有字母的东西,而不仅仅是拉丁字母。
    【解决方案2】:

    解决办法是这样的: $string = preg_replace('/[^\p{L}\p{N}\s]/u', '', $string);

    【讨论】:

    • 我喜欢它与 UTF-8 兼容这一事实。
    【解决方案3】:

    可以检查 unicode 字符和数字,但前提是 PCRE 是使用
    --enable-unicode-properties 编译的。如果是这种情况,那么您可以使用正则表达式 \p{Nl} 它将匹配 unicode 字母和数字。更多关于 PHP 中 unicode 正则表达式的信息可以在 documentation 中找到

    编辑: 编辑问题后

    要获取符号,请使用 \P 而不是 \p 再次查看我上面链接到的 PHP 文档。

    【讨论】:

    • 真的,我的朋友。我已经找到了一些东西,并且我已经编辑了我的问题。
    【解决方案4】:

    根据其他答案,为您允许的字符构建正则表达式(例如,从您支持的每个字母表中,并删除其他字符。这是Unicode Block Ranges 的列表以获取每种语言的字符值/范围 -这是你需要自己编译的东西。

    【讨论】:

      【解决方案5】:

      试试这个:

      <?php
      
      $string = "Remove these characters: £äó";
      $string = preg_replace('/[^(\x20-\x7F)]*/','', $string);
      echo $string;
      ?>
      

      【讨论】:

      • 问题是字符äó 不能被删除,因为它们用于单词而不是符号。相反,: 应该被删除。
      • 哦!我以为正好相反。问题即将从字符串中删除符号:)
      猜你喜欢
      • 2017-03-19
      • 2016-11-22
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多