当PHP从FTP文件夹输出文件名时,它会产生3个字符长的法语字符,所以当我们var_dump:
var_dump("é");
它显示:
string(3)
但实际角色应该是
string(2)
使用Wordpress功能拉取文件名
当它是字符串(3)时,我们不能对其执行preg_match以用标准ASCII字符替换它。
我尝试将格式声明为UTF-8,但它已经是UTF-8了。也尝试了
header('Content-Type: text/html; charset=iso-8859-1');
但结果是乱码。
我们还有什么可以尝试的吗?它是一个什么样的角色?
答案 0 :(得分:2)
你的角色é
实际上是0x65cc81
,而不是UTF-8 0xc3a9
中更常见的单一Unicode码点(é
带有急性的LATIN小写字母E(U + 00E9))。 0x65cc81
是Unicode“组合序列”:0x65
是e
“LATIN SMALL LETTER E”(U + 0065),0xcc81
是“组合急切加速”(U + 0301)”。
您可以使用PHP的Normalizer:
将组合序列转换为单个代码点function strhex($string) {
$hexstr = unpack('H*', $string);
return array_shift($hexstr);
}
$character = "é";
var_dump($character);
var_dump(strhex($character));
$character = Normalizer::normalize($character);
var_dump($character);
var_dump(strhex($character));
给出
string(3) "é"
string(6) "65cc81"
string(2) "é"
string(4) "c3a9"