php从mysql取数据输出时会出现问号的情况。
PHP通过设置character_set_client,告诉Mysql,PHP存进数据库的是什么编码方式。
PHP通过设置character_set_results,告诉Mysql,PHP需要取什么样编码的数据。PHP通过设置character_set_connection,告诉Mysql,PHP查询中的文本,使用什么编码。
MYSQL使用设置的编码方式存储文本。
mysql_select_db("travel", $con);//选择数据库
mysql_query ( "set character_set_client =utf-8" );
mysql_query ( "set character_set_results =gbk" ); //实践表明有这一行,php文件就可以显示汉字了,我的mysql字符集是gbk,可能别的有 gb2312等等
mysql_query ( "set character_set_connection =utf-8" );
以上三行mysql_query可以用mysql_query("set names gbk");代替。
具体关于字符集的事情请参考http://blog.csdn.net/martinkro/article/details/5352474
php可以显示汉字之后,在html里用echo会出现乱码,是因为html的字符集是utf-8
<?php
header("Content-Type:text/html;charset=gbk"); //输出前加上这行防止出现乱码。
echo $row ['title'];
?>
来说说这个 header("Content-Type:text/html;charset=gbk"); 详情参看http://www.jb51.net/article/22501.htm
一般html上面都有<meta http-equiv="Content-Type" content="text/html; charset=utf-8">,utf-8是为了符合国际化的标准………………总的来说header() 比<meta>优先级高,html会以header()为准。
至此原来utf-8标准下html中标签内的汉字将会变成乱码……继续研究中
我发现了一个叫做iconv的字符集转换函数,
iconv('gbk', 'utf-8', $str);
这是把gbk转换成utf-8,注意啊一定是utf-8,html是不认识utf8的………………
至此
<?php
header("Content-Type:text/html;charset=gbk"); //输出前加上这行防止出现乱码。
echo $row ['title'];
?>这段不在需要header()函数,变为如下:
<?php
$string = $row ['title'];
echo iconv("gbk","utf-8",$string);
?>
html上边还是<meta http-equiv="Content-Type" content="text/html; charset=utf-8">,也就是说html的字符集还是utf-8。
终于可以了………………