UTF-8字符无法正确显示

时间:2011-04-20 16:07:54

标签: 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;

输出结果为:

Тугайный Ñоловей

我该怎么办?我必须将$result放入MySQL数据库。

7 个答案:

答案 0 :(得分:15)

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

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

  • 文件编码正确
  • 服务器告诉交付文件的编码是什么。

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

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

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

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

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

PS:您还必须使用mb_strlen(),因为UTF8字符串上的strlen()可能会报告超过实际长度。

答案 1 :(得分:3)

我想,你的代码在windiws-1251,因为它是俄语:) 将您的字符串转换为utf-8:

$str = iconv('windows-1251', 'utf-8', $str);

答案 2 :(得分:2)

如果您要发送混合数据并且不想使用php标头指定utf-8,则可以将此html添加到您的页面:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 

答案 3 :(得分:1)

如果您的数据库是UTF-8,则可以使用mysql。

对于您的回声,如果您在网站上进行,请将其放在首页:

header('Content-Type: text/html; charset=UTF-8');

答案 4 :(得分:0)

尝试一下:

    header('Content-Type: text/html; charset=UTF-8');
    header("Content-type: application/octetstream");
    header("Pragma: no-cache");
    header("Expires: 0");
    //print "$name_field\n$data";

    // با این کد درست شد
    print chr(255) . chr(254) . mb_convert_encoding("$name_field\n$data", 'UTF-16LE', 'UTF-8');

答案 5 :(得分:-1)

只需在与服务器连接后的开头添加以下行:

mysqli_set_charset($conn,"utf8");

答案 6 :(得分:-1)

如果您只是使用不带html标头等的php echo,那么对我来说效果很好。

$ connect = mysqli_connect($ host_name,$ user_name,$ password,$ database); mysqli_set_charset($ connect,“ utf8”);