如何在latin1数据库中打印UTF-8数据?

时间:2015-12-09 23:19:53

标签: php mysql encoding utf-8 character-encoding

我的问题是我有一个导入为UTF-8的数据库,它的列是默认的latin1。这显然是一个问题所以当我在php上将字符集设置为UTF-8时它会给我而不是预期的ae字符。

现在,当我最初将我的编码设为windows-1252时,它工作得很好但是当我验证我的文件时,它说windows-1252是遗留的,不应该使用。

显然,我只是试图摆脱错误信息,但唯一的问题是我根本不允许更改数据库中的任何内容。有没有什么方法可以将数据输出为utf-8,同时仍然将latin1存储在数据库中?

3 个答案:

答案 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");