我要读取一个数据库的资料出来
数据库所有字段都是unicode
我php用的是utf-8编码
php版本是5.21
服务器是windosws服务器
现在读取出来的所有中文字段,在页面显示都是?????,我在数据库里面看到资料都是正常的文字
其他数字,字母等都能正常显示
有人知道怎么处理这个情况吗?
帮忙解决一下。
数据库所有字段都是unicode
我php用的是utf-8编码
php版本是5.21
服务器是windosws服务器
现在读取出来的所有中文字段,在页面显示都是?????,我在数据库里面看到资料都是正常的文字
其他数字,字母等都能正常显示
有人知道怎么处理这个情况吗?
帮忙解决一下。
你用的是 mssql ?
对呀,用的mssql2005
不是我想用,是公司的数据库就是这个,然后需要临时做一个网站出来,我用php就做了。结果就中文出不来!
则做一下转码
$s = iconv('ucs-2', 'utf-8', $s);
但是我读出来,显示就是正常的,这个是什么问题?
不作任何处理
echo base64_encode($s);
贴出结果
Lg==Lg==Pz8=Lg==Lg==Lg==Pz8=Lg==Lg==Pz8= 这个是结果
["input_encoding"]=> string(10) "ISO-8859-1" ["output_encoding"]=> string(10) "ISO-8859-1" ["internal_encoding"]=> string(5) "UTF-8"
这个是我的encoding
$d=mssql_select_db("spos", $db);
$sql = "select cdescription from prodmast_hd where baseitem='AN000001'";
$res = mssql_query($sql);
$row = mssql_fetch_array($res);
$data = $row['cdescription'];
//$data = substr($data,78);
echo base64_encode($data);
mssql_close();
然后页面出来的结果是:Pz8=
在数据库里面直接看中文是:项链
$db=mssql_connect("localhost","sa","abcde123");
$d=mssql_select_db("spos", $db);
$sql = "select brandname from prodmast_hd where baseitem='AN000001'";
$res = mssql_query($sql);
$row = mssql_fetch_array($res);
$data = $row['brandname'];
//$data = substr($data,78);
echo base64_encode($data);
mssql_close(); 这里出来的效果是:Pz8/Pw==
中文是:公共品牌$db=mssql_connect("localhost","sa","abcde123");
$d=mssql_select_db("spos", $db);
$sql = "select baseitem from prodmast_hd where baseitem='AN000001'";
$res = mssql_query($sql);
$row = mssql_fetch_array($res);
$data = $row['baseitem'];
//$data = substr($data,78);
echo base64_encode($data);
mssql_close(); 结果是:QU4wMDAwMDE=
数据库里是:AN000001
$d=mssql_select_db("spos", $db);
$sql = "select user_name from product_user where user_login_name='abcdef'";
$res = mssql_query($sql);
$row = mssql_fetch_array($res);
$data = $row['user_name'];
//$data = substr($data,78);
echo $data;
echo "<br>";
echo base64_encode($data);
mssql_close(); 这个是我自己通过网页写进数据库的内容:
显示结果:
哈哈
5ZOI5ZOI但是数据库里看到的就是:哈哈
$d=mssql_select_db("spos", $db);
$sql = "select '项链' as cdescription from prodmast_hd where baseitem='AN000001'";
$res = mssql_query($sql);
$row = mssql_fetch_array($res);
$data = $row['cdescription'];
//$data = substr($data,78);
echo $data;
echo "<br>";
echo base64_encode($data);
mssql_close(); 结果:
项链
6aG56ZO+
最好将他注释掉对于
这个是我自己通过网页写进数据库的内容:
显示结果:
哈哈
5ZOI5ZOI
但是数据库里看到的就是:哈哈比较容易解释
因为你插入时加了 N 声明,并且你的程序是 utf-8 的
所以 utf-8 的 哈哈 就被强制解释成了 哈哈,这是6个unicode字符
取回来时重新被php转换成了 utf-8 的可知你 mssql.charset = utf-8
php.ini我注释掉了,你看到的结果是我选择浏览器是unicode/utf-8方式看到的结果,如果用其他方式,就全是??或者乱码了!
php.ini里面没有mssql.charset,只有
;default_charset = "utf-8",一直都是没有去掉冒号的状态!
我把刚才直接取字段显示的那段内容,整个页面字段效果都改成gbk
获取数据的结果:都是???
是不是因为字段是nvarchar,php不支持nvarchar,所以才这样,我需要怎么更改?
我看了很多人说,但是没有看到一个说解决了,都是没有结果的帖子
这不知道你们是怎么弄的
因为资料录入客户端是PB写的,是支持多语言版本的。
我PHP只负责拿资料,不知道是不是这个原因。我也搞不懂了,我都快郁闷死了!
不过你可以尝试用 odbc 函数组试一下