PHP输出一个奇怪的法语字符é;=字符串(3)
当PHP从FTP文件夹输出文件名时,它会生成3个字符长的法语字符,因此当我们使用var_dump时:PHP输出一个奇怪的法语字符é;=字符串(3),php,utf-8,format,Php,Utf 8,Format,当PHP从FTP文件夹输出文件名时,它会生成3个字符长的法语字符,因此当我们使用var_dump时: var_dump("é"); 它表明: string(3) 但实际角色应该是 string(2) 使用Wordpress函数提取文件名 当它是字符串(3)时,我们不能对它进行preg_匹配以用标准ASCII字符替换它 我尝试将格式声明为UTF-8,但它已经是UTF-8了。也试过 header('Content-Type: text/html; charset=iso-8859-1');
var_dump("é");
它表明:
string(3)
但实际角色应该是
string(2)
使用Wordpress函数提取文件名
当它是字符串(3)时,我们不能对它进行preg_匹配以用标准ASCII字符替换它
我尝试将格式声明为UTF-8,但它已经是UTF-8了。也试过
header('Content-Type: text/html; charset=iso-8859-1');
但结果是文本乱码
还有什么我们可以试试的吗?它是什么类型的字符?您的字符
é
实际上是0x65cc81
,而不是UTF-80xc3a9
(é
带锐音符的拉丁文小写字母e(U+00E9))0x65cc81
是一种Unicode“组合序列”:0x65
是e
“拉丁字母e”(U+0065)和0xcc81
是́“组合尖锐重音(U+0301)”
可以使用PHP将组合序列转换为单个代码点:
给予
您的字符
é
实际上是0x65cc81
,而不是UTF-80xc3a9
中更常见的单个Unicode码点(e
带锐音符的拉丁文小写字母e(U+00E9))0x65cc81
是一种Unicode“组合序列”:0x65
是e
“拉丁字母e”(U+0065)和0xcc81
是́“组合尖锐重音(U+0301)”
可以使用PHP将组合序列转换为单个代码点:
给予
这听起来非常类似于确保使用htmlspecialchars将文件名包装在echo中-
string(1)
是一个1字节的字符串;UTF-8是一个多字节字符集,因此1个字符不等于1个字节。它的可能重复项看起来不像是一个UTF-8é
:这听起来非常类似,以确保在回音中使用htmlspecialchars包装文件名-字符串(1)
是一个1字节字符串;UTF-8是一个多字节字符集,因此1个字符不等于1个字节。它的可能副本看起来不像您有一个UTF-8é
:这工作得很好,谢谢您的时间标记!我们可以在包含特殊字符的整个字符串上运行它,而不仅仅是单个字符。对于那些阅读它的人,只需使用Mark的$character=Normalizer::normalize($character);它会将它们转换为普通的单代码点。这工作非常漂亮,谢谢你的时间标记!我们可以在包含特殊字符的整个字符串上运行它,而不仅仅是单个字符。对于那些阅读它的人,只需使用Mark的$character=Normalizer::normalize($character);它将把它们转换成普通的单代码点
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"