我正在尝试对以 ISO-8859-1 编码的数据使用 preg_match() 。如果我尝试匹配其中包含非 UTF-8 字符的字符串,preg_match() 会给我一个空匹配数组。
考虑以下代码:
setlocale(LC_ALL, 'en_US.iso-8859-1');
mb_internal_encoding("iso-8859-1");
// this returns an empty $matches array
$str = "Prices starting at " . chr(0x80);
preg_match('/^\s*+(?:\S++\s*+){1,3}/u', $str, $matches);
// this returns a filled matches array
$str = "Prices starting at $";
preg_match('/^\s*+(?:\S++\s*+){1,3}/u', $str, $matches);
在这种情况下,chr(0x80) 是欧元符号。在我升级到 php 5.4 之前,它工作得很好,但自从 php 5.4 不再存在了。
有什么方法可以让 php 5.4 preg_match() 理解我的 ISO-8859-1 数据?