我在这里面临着一个非常紧张的问题..我有UTF-8格式的所有东西,我所有的数据库和表都是utf8_general_ci格式的,但是当我试图从一个PHP脚本插入或更新时,我看到的都是符号。但是,如果我在phpmyadmin中进行编辑,这些单词将正确显示。我发现如果我在php中对我的字符串运行utf8_decode()函数,我可以让它工作,但我不打算这样做,因为这很混乱,而且它应该不这样做就能工作:
下面是我用来测试这一点的基本代码:
<?php
$conn=mysql_connect("localhost","root","root")
or die("Error");
mysql_select_db("mydb",$conn) or
die("Error");
mysql_query("UPDATE `mydb`.`Clients` SET `name` = '".utf8_decode("Araña")."' WHERE `Clients`.`id` =25;",
$conn) or die(mysql_error());
mysql_close($conn);
echo "Success.";
?>这是如果我不使用php utf8_decode函数解码utf8得到的结果:
我得到的不是阿拉,而是阿拉
发布于 2011-06-28 00:12:29
我已经遇到同样的问题很多次了。有时是因为我选择的数据库链接类型与我用于插入的类型不同,而在其他情况下,它是从文件数据到数据库的。
对于后一种情况,mysql_set_charset('utf8',$link);是神奇的答案。
在通过mysql_select_db选择数据库之后,立即调用mysql_set_charset。
@ref http://php.net/manual/en/function.mysql-set-charset.php
发布于 2010-11-30 11:09:32
“Ara?±a”是UTF-8。字符“?±”表示西班牙字母以UTF-8编码成的两个字节。无论您使用的是什么,都不能处理UTF-8,而是将其显示为(看起来) ISO-8859-1。
发布于 2011-06-28 09:09:02
您提到的DDL与排序规则有关,而与字符集无关。正确的说法应该是:
ALTER TABLE Clients CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;您仍然需要确保客户端库(libmysql或PHP使用的任何驱动程序)没有将数据代码转换回ISO-8859。mysql_set_charset('utf8')将显式地将客户端编码设置为UTF-8。或者,也可以在连接到数据库后立即发送一组名称UTF8;。要隐式地实现这一点,可以将my.cnf客户端块更改为使用utf-8作为客户端字符编码(并应用/etc/init.d/mysql重新加载)。无论哪种方式,都要确保客户端不会破坏它所提取的结果。
客户端默认字符集=UTF8
如果您使用的是to字符串,则不需要使用utf8_decode。以下php.ini配置应确保PHP端支持UTF8:
mbstring.internal_encoding = utf-8
mbstring.http_output = utf-8
mbstring.func_overload = 6最后,在HTML中显示结果时,请验证页面的编码是否显式为UTF-8。
https://stackoverflow.com/questions/4310148
复制相似问题