即使包含在 utf-8 中,我的函数也不会 return 某些字母(vscode、php)
my function doesn't return some letters even though included in utf-8 (vscode, php)
它应该吐出字符串的每个字母,如果它在对象键之一中,但那些奇怪的字符 æø 等根本不显示,我得到的结果如下:ltkai。而不是:lætkaiø。
我正在使用 vscode 和 php(使用 scoop 安装)。
我在 vscode.
中尝试了 UTF-8 和带 BOM 编码的 UTF-8
我已经在使用 meta charset="utf-8".
我试过使用 charset="" header()。
我用mbstring扩展来检测它是否是utf-8,它总是注册为utf并显示带循环的奇数字母和整个字符串,
但如果它在我的 if stmt 中,
它只是没有注册为 utf,
utf_encode 不起作用(就像它已经将它们注册为 utf,然后对它们进行编码,然后返回更奇怪的字母)。
我也在我的函数外使用了 property_exists() ,它在那里工作,但仍然不能在里面。
我试过了utf_encode,还是不行。
$name = 'lætkaiø';
$vocals = (object) ['æ' => 4, 'i' => 3, 'ø' => 3, 'a' => 4];
$konsonants = (object) ['t' => 5, 'l' => 6, 'k' => 3];
function letters($name, $konsonants, $vocals) {
$letterarr = str_split($name);
foreach($letterarr as $letter){
if (property_exists($konsonants, $letter)){
echo($letter);
}
if (property_exists($vocals, $letter)){
echo($letter);
}
}
}
如果有人知道为什么会发生这种情况或如何解决它?
谢谢:)
str_split
是按字节操作的,æ
等字符在UTF-8中占1个字节以上。
所以如果你 str_split
这些字符,它们基本上会 'split in two' 变成无效字符。在 $letterarr
上 运行 count()
可以看到数组中有 9 个项目,而不是预期的 7 个。
解决方案是使用 PHP 的支持 UTF-8 的字符串函数。只需将 str_split
更改为 mb_str_split
即可修复您的代码示例。
它应该吐出字符串的每个字母,如果它在对象键之一中,但那些奇怪的字符 æø 等根本不显示,我得到的结果如下:ltkai。而不是:lætkaiø。
我正在使用 vscode 和 php(使用 scoop 安装)。
我在 vscode.
中尝试了 UTF-8 和带 BOM 编码的 UTF-8我已经在使用 meta charset="utf-8".
我试过使用 charset="" header()。
我用mbstring扩展来检测它是否是utf-8,它总是注册为utf并显示带循环的奇数字母和整个字符串, 但如果它在我的 if stmt 中, 它只是没有注册为 utf, utf_encode 不起作用(就像它已经将它们注册为 utf,然后对它们进行编码,然后返回更奇怪的字母)。
我也在我的函数外使用了 property_exists() ,它在那里工作,但仍然不能在里面。
我试过了utf_encode,还是不行。
$name = 'lætkaiø'; $vocals = (object) ['æ' => 4, 'i' => 3, 'ø' => 3, 'a' => 4]; $konsonants = (object) ['t' => 5, 'l' => 6, 'k' => 3]; function letters($name, $konsonants, $vocals) { $letterarr = str_split($name); foreach($letterarr as $letter){ if (property_exists($konsonants, $letter)){ echo($letter); } if (property_exists($vocals, $letter)){ echo($letter); } } }
如果有人知道为什么会发生这种情况或如何解决它? 谢谢:)
str_split
是按字节操作的,æ
等字符在UTF-8中占1个字节以上。
所以如果你 str_split
这些字符,它们基本上会 'split in two' 变成无效字符。在 $letterarr
上 运行 count()
可以看到数组中有 9 个项目,而不是预期的 7 个。
解决方案是使用 PHP 的支持 UTF-8 的字符串函数。只需将 str_split
更改为 mb_str_split
即可修复您的代码示例。