UTF-8字符无法正确显示

The*_*ets 10 php utf-8 multibyte

这是我的PHP代码:

<?php
$result = '';
$str = '???????? ???????';
for ($y=0; $y < strlen($str); $y++) {
    $tmp = mb_substr($str, $y, 1);
    $result = $result . $tmp;
}
echo 'result = ' . $result;
Run Code Online (Sandbox Code Playgroud)

输出是:

Тугайный Ñоловей
Run Code Online (Sandbox Code Playgroud)

我能做什么?我必须放入$resultMySQL数据库.

Cap*_*ule 15

您的文件的编码是什么?它也应该是UTF8.什么是您的http服务器的默认字符集?它也应该是UTF-8.

编码仅在以下情况下有效:

  • 文件编码正确
  • 服务器告诉传递文件的编码是什么.

使用数据库时,还必须为数据库字段设置正确的编码以及 MySQL客户端与服务器通信的方式(请参阅参考资料mysql_set_charset()).只有字段是不够的,因为您的MySQL客户端(在本例中为PHP)可以默认设置为ISO并重新解释数据.所以你最终用UTF8 DB - > ISO客户端 - >注入UTF8 PHP脚本.难怪为什么它最后搞砸了:-)

如何使用正确的字符集来提供文件?

header('Content-type: text/html; charset=utf-8') 是一个解决方案

包含的.htaccess文件AddDefaultCharset UTF-8是另一个

HTML元内容类型也可能有效,但使用HTTP标头发送此信息总是更好.

PS:你也必须使用mb_strlen()因为strlen()在UTF8字符串上可能会报告超过实际长度.