我在替换字符方面遇到问题 - 文字I中的菱形问号�用SplFileObject读取。此字符已存在于我的文本文件中,因此无法将其转换为其他编码。我决定使用preg_match()来搜索它,但问题是PHP无法找到它。 PHP可能认为它与�不同。我不想从文本中删除此字符,这就是我想用preg_match()搜索它的原因。有没有办法在PHP中匹配这个角色?
我尝试使用正则表达式行:/.�./i
,但没有成功。
答案 0 :(得分:2)
试试这个代码.�字符的十六进制是FFFD
$line = "�";
if (preg_match("/\x{FFFD}/u", $line, $match))
print "Match found!";
答案 1 :(得分:0)
使用SplFileObject的PHP似乎读取文件有点不同而不是U + FFFD检测到U + 0093和U + 0094。如果您遇到与我相同的问题,那么我建议您使用hexdump来获取有关如何在其中编码无法识别的字符的信息。之后我建议您在评论中使用@stribizhev建议的this snippet来获取PHP识别的十六进制代码。一旦你找出了无法识别的字符的正确十六进制代码(使用@stribizhev在评论中建议的conversion tool,以获得正确的值),你可以使用preg _...()函数。这是我的问题的解决方案:
preg_replace("/(?|\x93|\x94)/i", "'", $text);