[英]UTF-8 characters don't display correctly
这是我的 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 数据库中。
你的文件编码是什么? 它也应该是UTF8。 你的 http 服务器的默认字符集是什么? 它也应该是 UTF-8。
编码仅在以下情况下有效:
使用数据库时,您还必须为数据库字段设置正确的编码以及MySQL 客户端与服务器通信的方式(请参阅mysql_set_charset()
)。 仅字段是不够的,因为您的 MySQL 客户端(在本例中为 PHP)可以默认设置为 ISO 并重新解释数据。 所以你最终得到了 UTF8 DB -> ISO 客户端 -> 注入到 UTF8 PHP 脚本中。 难怪为什么最后搞砸了:-)
如何使用正确的字符集提供文件?
header('Content-type: text/html; charset=utf-8')
是一种解决方案
包含AddDefaultCharset UTF-8
.htaccess 文件是另一个
HTML 元内容类型也可能有效,但使用 HTTP 标头发送此信息总是更好。
PS:您还必须使用mb_strlen()
因为 UTF8 字符串上的strlen()
可能会报告超过实际长度。
如果您要发送混合数据并且不想使用 php 标头指定 utf-8,则可以将此 html 添加到您的页面:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
我想,您的代码采用windows-1251
编码,因为它是俄语 :) 将您的字符串转换为 utf-8:
$str = iconv('windows-1251', 'utf-8', $str);
如果您的数据库是 UTF-8,那么 mysql 就可以了。
对于你的回声,如果你在网站上做,把它放在首页:
header('Content-Type: text/html; charset=UTF-8');
只需在与服务器连接后的开头添加此行:
mysqli_set_charset($conn,"utf8");
如果您只是使用没有 html 标题等的 php echo,这对我来说非常有用。
$connect = mysqli_connect($host_name, $user_name, $password, $database); mysqli_set_charset($connect,"utf8");
尝试这个:
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');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.