我尝试使用 preg_replace
只维护字符串中的有效字符和希伯来语 Unicode 字符。
我在该字符串上遇到错误:
$PLAINText1 = preg_replace('/[^(\x20-\x7F),(\x05D0-\x05F2)]*/','', $PLAINText);
错误是:
Compilation failed: range out of order in character class at offset 25 in....
我已经知道错误仅出现在这个短语中:(\x05D0-\x05F2)
我在这里阅读了很多有关此问题的帖子,但没有找到解决方案。一篇相关文章建议将 } 添加到 Unicode,因此在此字符串上:
$PLAINText1 = preg_replace('/[^(\x20-\x7F),(\x{05D0}-\x{05F2})]*/','', $PLAINText);
我收到了不同的错误:
character value in
\x{...}
sequence is too large at offset 22 ...
请帮忙。
最佳答案
\x
仅接受两个十六进制数字,因此您的范围将转换为“ENQ 字符、D、0 和 ENQ 之间的任何内容(这是错误)、F 或 2”
尝试在正则表达式末尾添加 Unicode 修饰符 u
,并使用 \x{05D0}
明确告诉它使用多少个字符作为十六进制数字.
关于php - preg_replace 不接受 unicode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17069456/