如何解决即使包含在 utf-8 (vscode, php) 中,我的函数也不会返回一些字母
它应该吐出字符串的每个字母,如果它在对象键之一中,但那些奇怪的字符 æø 等根本不显示,我得到的结果如下:ltkai。而不是:lætkaiø。
我正在使用 vscode 和 php(使用 scoop 安装)。
-
我在 vscode 中尝试过使用 BOM 编码的 UTF-8 和 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
这些字符,它们基本上会“一分为二”成为无效字符。只需在 count()
上运行 $letterarr
即可看到数组中有 9 个项目,而不是预期的 7 个。
解决方案是使用支持 UTF-8 的 PHP 字符串函数。只需将 str_split
更改为 mb_str_split
即可修复您的代码示例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。