2011-04-20 127 views
8

显示这是我的PHP代码:UTF-8字符不能正确

<?php 
$result = ''; 
$str = 'Тугайный соловей'; 
for ($y=0; $y < strlen($str); $y++) { 
    $tmp = mb_substr($str, $y, 1); 
    $result = $result . $tmp; 
} 
echo 'result = ' . $result; 

输出是:

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

我能做些什么?我必须将$result放入MySQL数据库。

回答

15

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

  • 文件被正确
  • 服务器通知有什么传输文件的编码编码:

    编码只有工作。

当使用数据库,你也必须设置正确的编码为你的数据库字段 MySQL客户端与服务器的通讯方式(见mysql_set_charset())。只有字段是不够的,因为您的MySQL客户端(在这种情况下,PHP)可以默认设置为ISO并重新解释数据。所以你最终用UTF8 DB - > ISO client - >注入到UTF8 PHP脚本中。难怪为什么它结束了:-)

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

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

AddDefaultCharset UTF-8 .htaccess文件是另外一个

HTML元内容类型可能工作太,但它总是不如送使用HTTP头信息。

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

+0

有两件事要检查,1)你的数据库UTf-8,2)你的文档类型是UTF-8吗? – afuzzyllama 2011-04-20 16:15:52

+1

5个大问题中的一个很好的答案 – 2011-04-20 16:16:13

+0

@Matthieu耶,伤心......我想这是因为大多数人用英文工作,不用担心编码;-) – Capsule 2011-04-20 16:23:20

1

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

为了您的回音,如果你在一个网站做到这一点,把这个在首页:

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

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

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

如果你要发送的数据的混合,不希望使用PHP的头,确定UTF-8,你可以这个网站添加到您的网页:

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