12

这是我的 PHP 代码:

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

输出是:

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

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

4

7 回答 7

16

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

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

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

使用数据库时,您还必须为 DB 字段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 字符串可能会报告超过实际长度。

于 2011-04-20T16:11:07.177 回答
4

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

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
于 2011-04-20T16:34:39.593 回答
3

我想,您的代码处于windows-1251编码状态,因为它是俄语 :) 将您的字符串转换为 utf-8:

$str = iconv('windows-1251', 'utf-8', $str);
于 2011-04-20T16:11:55.533 回答
2

如果你的数据库是 UTF-8,那么 mysql 就可以了。

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

header('Content-Type: text/html; charset=UTF-8');
于 2011-04-20T16:11:17.593 回答
2

只需在开头添加这一行,在与服务器连接之后:

mysqli_set_charset($conn,"utf8");
于 2020-01-07T19:46:58.863 回答
0

如果您只是使用没有 HTML 标头等的 PHP 回显,这对我来说非常有用。

$connect = mysqli_connect($host_name, $user_name, $password, $database);
mysqli_set_charset($connect,"utf8");
于 2020-03-11T14:33:20.270 回答
-1

尝试这个:

    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');
于 2019-09-04T05:37:34.707 回答