繁体   English   中英

UTF-8 字符显示不正确

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM