我遇到了一些问题。我的数据库中有一些拉脱维亚语数据(即Valentīna
),我需要在页面上显示这些数据。其他数据保存在cp1257编码中,看起来像AÎDA MACIJEVSKA
-,显示为Aīda Macijevska
所以我所尝试的。。。
1 - ucwords(mb_strtolower(iconv("windows-1257", "UTF-8//TRANSLIT", trim($row['pac_name'])), "UTF-8"));
2 - ucwords(mb_strtolower(iconv("windows-1257", "UTF-8", trim($row['pac_name'])), "UTF-8"));
3 - just show without any converting from DB `$row["pac_name"]`;
并且所有3个点显示相同的结果-Valent?na
p.S数据库有utf8_general_ci排序规则,我还给出了utf-8编码的头header('Content-Type: text/html; charset=utf-8');
有人能帮我解决问题吗?
假设您真正使用的是cp1257而不是utf8,那么您需要
SET NAMES cp1257
(或者客户端告诉mysqld字节是使用cp1257编码的某种其他方式)- 每列上的
CHARACTER SET cp1257
(或者可能是表定义中的默认值)
但听起来你应该选择utf8,而不是cp1257…
在我看来,Î
并不存在于cp1257
中。参考:http://en.wikipedia.org/wiki/Windows-1257。因此,您提到的代码可以通过使用ī
或?
来自由地将其搞砸。
如果你真的需要I-hat,可以选择utf8
。请注意,存在排序规则utf8_latvian_ci
。这里提到的所有i都存在于utf8中。
如果您还有其他问题,请为任何有问题的文本提供SELECT HEX(col)...
。例如(为了清晰起见,添加了空格):
在utf8:A岛-->41C38E44 41;Aīda-->41C4AB64 61
在cp1257中:Aīda-->41EE64 61