Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于从多语言字符串中筛选除白名单字符以外的所有字符的正则表达式_Php_Regex_Filter_Multilingual - Fatal编程技术网

Php 用于从多语言字符串中筛选除白名单字符以外的所有字符的正则表达式

Php 用于从多语言字符串中筛选除白名单字符以外的所有字符的正则表达式,php,regex,filter,multilingual,Php,Regex,Filter,Multilingual,我正在尝试清理来自多语言网站上搜索框的字符串 通常我会使用正则表达式,如: $allowed = "-+?!,.;:\w\s"; $txt_search = preg_replace("/[^" . $allowed . "]?(.*?)[^" . $allowed . "]?/iu", "$1", $_GET['txt_search']); 这对英语文本来说很好 然而,当输入的文本可以是任何语言(现在是俄语,将来是汉语)时,我也需要这样做 如何在保留原始语言中的“正常文本”的同时清理字符串

我正在尝试清理来自多语言网站上搜索框的字符串

通常我会使用正则表达式,如:

$allowed = "-+?!,.;:\w\s";
$txt_search = preg_replace("/[^" . $allowed . "]?(.*?)[^" . $allowed . "]?/iu", "$1", $_GET['txt_search']);
这对英语文本来说很好

然而,当输入的文本可以是任何语言(现在是俄语,将来是汉语)时,我也需要这样做

如何在保留原始语言中的“正常文本”的同时清理字符串


我想切换到黑名单(虽然我不想…),但此时正则表达式完全破坏了所有原始输入。

这是一个常见的问题,俄语字母不被模式识别,因此您可以使用


$allowed=“-+?!,.;:\w\sа-а”

常见的问题是,俄语字母不能被模式识别,\w所以您可以使用


$allowed=“-+?!,.;:\w\sа-а”

您可以使用\p{LN}
[\p{L}\p{N}]
而不是\w,请参见

您可以使用\p{LN}
[\p{L}\p{N}]
而不是\w,请参见

不会将[а-а]扩展到其UTF-8编号,因此[50-60000](编号不准确)?我想这对正则表达式来说太慢了。你能在字符类中使用字符类吗?这将转换为[^-+?!,.;:\w\s[а-а]]Jeroen,我可以,但你是对的,没有“子类”,所以它添加了“[”和“]”符号。回答:修复:)嗯,这不起作用,如果我使用它,我会得到一个警告:“消息:preg_replace()[function.preg replace]:编译失败:偏移量5处的UTF-8字符串无效”。我想,您保存的文件不是utf8格式,而是cp1251编码格式。不会将[а-а]扩展为UTF-8数字,所以[50-60000](数字不准确)?我想这对正则表达式来说太慢了。你能在字符类中使用字符类吗?这将转换为[^-+?!,.;:\w\s[а-а]]Jeroen,我可以,但你是对的,没有“子类”,所以它添加了“[”和“]”符号。回答:修复:)嗯,这不起作用,如果我使用它,我会得到一个警告:“消息:preg_replace()[function.preg replace]:编译失败:偏移量5处的UTF-8字符串无效”。我想,您保存的文件不是utf8格式,而是类似cp1251编码的格式。谢谢。我在偏移量5处不断得到无效的UTF-8字符串。PCRE是否可能不是用unicode属性编译的,我可以检查一下吗?目前我只是在ubuntu 9.10桌面服务器上测试。我无法让它工作,但我想我会在另一台服务器上尝试,也许这是本地问题。谢谢。我在偏移量5处不断得到无效的UTF-8字符串。PCRE是否可能不是用unicode属性编译的,我可以检查一下吗?目前我只是在ubuntu 9.10桌面服务器上测试。我无法让它工作,但我想我会在另一台服务器上尝试,也许这是本地问题。