【问题标题】:Php charset information [duplicate]php字符集信息[重复]
【发布时间】:2014-06-14 06:25:36
【问题描述】:

我正在编写一个页面,该页面向用户显示来自数据库的一些信息,该信息包含一些口音我提出请求&lt;input type="text" id="de" value="&lt;?php echo $row-&gt;de; ?&gt;" class="input" size="50"/&gt; 在这里他显示字符集的问题,单词 have (í, ã) 和值显示 (? ? )不是这个词,我该如何解决这个问题? 是的,我的页面上有<META http-equiv="Content-Type" content="text/html; charset=utf-8"> 。 对不起我的英语不好。

【问题讨论】:

  • 您确定数据库返回 UTF-8 编码的材料?
  • 页面可能设置为 utf,但您确定您的数据库表和与数据库的连接也是 utf 吗?整个渲染管道必须是相同的字符集,或者通过适当的翻译逻辑连接。任何地方的任何不匹配都会破坏东西。

标签: php html mysql


【解决方案1】:

使用PHP函数utf8_encode

试试:

<input type="text" id="de" value="<?php echo utf8_encode($row->de); ?>" class="input" size="50"/>

确保 IDE 使用的配置为默认 UTF-8。

这是抽查,即整个return都必须放置这个函数。 更正最终检查如下:

在每个 PHP 输出标头中,指定 UTF-8 作为编码:

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

mysql_*

$link = mysql_connect('localhost', 'user', 'password');
mysql_set_charset('utf8', $link);

mysql_* 已弃用

mysqli

$mysqli = new mysqli("localhost", "my_user", "my_password", "test");
$mysqli->set_charset("utf8");

PDO

$pdo = new PDO(
    'mysql:host=mysql.example.com;dbname=example_db',
    "username",
    "password",
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

在 MySQL 方面,需要对 my.ini 文件进行如下修改:

[client]
default-character-set=UTF-8

[mysql]
default-character-set=UTF-8

[mysqld]
character-set-client-handshake = false #force encoding to uft8
character-set-server=UTF-8
collation-server=UTF-8_general_ci

[mysqld_safe]
default-character-set=UTF-8

【讨论】:

  • 如果utf8_encode 解决了问题,您最好修复与数据存储之间的其余数据管道。在现实生活中几乎没有理由使用utf8_encode,除非你不知道自己在做什么。
  • @deceze 所以我写信给他,让他在页面 IDE 上默认设置为 UTF-8。由于 utf8_encode 工作的简单事实,他的文件采用另一种编码。
  • 不,文件编码与它无关。 $row-&gt;de 是 Latin-1 编码的,这似乎来自数据库。文件的编码与此无关。
  • @deceze 我编辑了这篇文章。检查是否一切正常。随时提出修改建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多