我的问题是我有一个导入为UTF-8的数据库,它的列是默认的latin1。这显然是一个问题所以当我在php上将字符集设置为UTF-8时它会给我�
而不是预期的ae
字符。
现在,当我最初将我的编码设为windows-1252
时,它工作得很好但是当我验证我的文件时,它说windows-1252
是遗留的,不应该使用。
显然,我只是试图摆脱错误信息,但唯一的问题是我根本不允许更改数据库中的任何内容。有没有什么方法可以将数据输出为utf-8
,同时仍然将latin1
存储在数据库中?
答案 0 :(得分:0)
时间以前,我使用此功能解决了不同潜伏的不受控制的字符集xD的地狱性页面中的打印文本:
function to_entities($string)
{
$encoding = mb_detect_encoding($string, array('UTF-8', 'ISO-8859-1')); // and a few encodings more... sigh...
return htmlentities($string, ENT_QUOTES, $encoding, false);
}
print to_entities('á é í ó ú ñ');
答案 1 :(得分:0)
1252(latin1)可以处理æ
。它是十六进制E6
。在utf8中,它是十六进制C3A6
。
�
通常来自latin1编码,然后将其显示为utf8。所以,让我们回到存储的内容。
请提供SHOW CREATE TABLE
。我怀疑它会说CHARACTER SET latin1
,而不是utf8。
然后,让我们看看
SELECT col, HEX(col) FROM tbl WHERE ...
看十六进制。 (见上面的十六进制说明。)
假设到目前为止一切都是latin1,那么简单(也许是权宜之计)的答案就是检查html源代码。我怀疑它说
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
更改为charset=ISO-8859-1
可能会解决黑钻问题。
但是...... latin1只处理西欧人物。如果你需要斯拉夫语,希腊语,中文等,那么你确实需要utf8。在这种情况下,我会提供不同的答案。
答案 2 :(得分:0)
I have figured out how to do this after looking through the link that Fred provided, thanks!
if anyone needs to know what to do
if you have a database connection file. inside that, underneath the mysqli_connect command add
mysqli_set_charset($connectvar, "utf8");