PHP从字符串中删除符号

Posted

技术标签:

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

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

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

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

任何帮助将不胜感激!

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

$string = preg_replace('/[^\pL\pN\s]/u', '', $string);

【问题讨论】:

【参考方案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('/[^\pL\pN\s]/u', '', $string);

【讨论】:

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

可以检查 unicode 字符和数字,但前提是 PCRE 是使用--enable-unicode-properties 编译的。如果是这种情况,那么您可以使用正则表达式 \pNl 它将匹配 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;
?>

【讨论】:

问题是字符äó 不能被删除,因为它们用于单词而不是符号。相反,: 应该被删除。 哦!我以为正好相反。问题即将从字符串中删除符号:)

以上是关于PHP从字符串中删除符号的主要内容,如果未能解决你的问题,请参考以下文章

如何从字符串PHP的开头删除⭕️和♛表情符号?

php 从提供的内容中生成摘录。剥离HTML,删除尾随标点符号,并在删除文本时添加“更多”字符串。

删除 PHP 中可以从其他 textEditor 输入的特殊字符

如何从字符串中删除表情符号字符?

从字符串中删除点符号[重复]

从字符串中删除重音符号