我正在尝试使用preg_replace
仅保留字符串中的有效字符和希伯来语Unicode字符。
我在这个字符串上收到错误:
$PLAINText1 = preg_replace('/[^(\x20-\x7F),(\x05D0-\x05F2)]*/','', $PLAINText);
错误是:
编译失败:在...中的偏移25处的字符类中无序排列。
我已经知道错误仅在此短语中:(\x05D0-\x05F2)
我在这里阅读了很多关于这个问题的帖子,并没有找到解决方案。一篇相关的帖子建议在Unicode中添加},所以在这个字符串上:
$PLAINText1 = preg_replace('/[^(\x20-\x7F),(\x{05D0}-\x{05F2})]*/','', $PLAINText);
我遇到了另一个错误:
时太大
\x{...}
序列中的字符值在偏移量22 ...
请帮忙。
答案 0 :(得分:3)
\x
只接受两个十六进制数字,因此您的范围转换为“ENQ字符,D,0和ENQ之间的任何内容(这是错误),F或2”
尝试在正则表达式的末尾添加Unicode修饰符u
,并使用\x{05D0}
明确告诉它使用多少个字符作为十六进制数。
答案 1 :(得分:1)
除非另行通知,否则您可以使用\p{Hebrew}
包含有效的希伯来字符,并使用\P{Hebrew}
答案 2 :(得分:0)
您应该将文件更改为utf 8编码,例如:notepad ++ go to encoding - >编码为UTF-8并且shudold工作:preg_replace('/[^\p{Hebrew}a-zA-Z0-9_ %[].()&-]/u','', $q)
我还添加了“u”作为修饰符。
答案 3 :(得分:0)
下面将替换除alphanumaric,希伯来语和下划线之外的任何unicode字符。
$foo = preg_replace('/[^\w\x{05D0}-\x{05F2}]+/u', '', $foo);
以下将替换除ASCII字符之外的任何unicode字符,从20到127和希伯来语。
$foo = preg_replace('/[^\x{20}-\x{7F}\x{05D0}-\x{05F2}]+/u', '', $foo);