PHP从字符串中删除符号

PHP从字符串中删除符号,php,string,symbols,Php,String,Symbols,通过互联网和这个网站搜索,我发现了一些关于这个问题的话题。问题是,如果插入的字符串必须只包含拉丁字母表的字符,有无数的解决方案,但当案例需要其他字母表的文本时,它变得有点棘手 有没有办法在PHP中去掉字符串中的所有符号,但保留所有UTF-8字母的实际字母?我已经尝试过创建一个包含我键盘上所有字符的数组,然后使用str_replace或preg_replace删除它们,但后来我发现不同的国家有时也有不同的键盘,其中包含不同的符号。例如,我的qwerty键盘没有英国键盘可能具有的符号 我知道这是一个

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

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

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

任何帮助都将不胜感激

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

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

尝试以下操作:

<?php

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


根据其他答案,为您允许的字符构建正则表达式(例如,从您支持的每个字母表中删除其他字符。下面是一个列表,用于获取每种语言的字符值/范围-这是您需要自己编译的内容。

可以检查unicode字符和数字,但前提是PCRE是使用
--启用unicode属性
。如果是这种情况,则可以使用正则表达式
\p{Nl}
,它将匹配unicode字母和数字。有关PHP中unicode正则表达式的更多信息,请参阅

编辑: 编辑后的问题

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

解决方案如下:
$string=preg_replace('/[^\p{L}\p{N}\s]/u','''$string);

问题是,字符
äó
不能被删除,因为它们在单词中使用,不是符号。相反,
应该被删除。哦!我的想法正好相反。问题是要从字符串中删除符号:)是的。但我需要的是允许所有字母,而不仅仅是拉丁字母。是的,我的朋友。我已经找到了一些东西,我已经编辑了我的问题。我喜欢这是UTF-8兼容的事实。
$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'