PHP / MySQL:将数据插入数据库字符集问题

时间:2009-04-19 11:25:59

标签: php mysql character-encoding

我正在构建一个从其他页面获取文本并将其插入数据库的网站。

问题是所有特殊字符都使用HTML编码保存在数据库中,因此我需要使用以下命令转换输出:

<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />

我的意思是,我现在所拥有的不仅仅是保存字符“'”html版本“&#x27;”保存在数据库中。当保存西班牙语字符或其他特殊字符时也会发生这种情况。我没有用“ñ”作为例子,而是保存了“&ntilde;”。

这会浪费数据库中的空间,我还需要稍后使用content-type转换输出:

如何在保存之前转换或设置字符集,或者让MySQL转换它?

如果你需要知道我如何连接到数据库:

function dbConnect() {      
    $conn = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or die ('Error.');
    return $conn;
}

    $conn = dbConnect();
    $stmt = $conn->stmt_init();

希望你能帮助我!! 感谢。

3 个答案:

答案 0 :(得分:1)

您可以使用html_entity_decode()将HTML转换为(真实)字符编码。

<? echo html_entity_decode("&ntilde;", ENT_COMPAT, "UTF-8"); ?>
ñ

请注意,“HTML”不是通常意义上的字符编码,因此iconv等库不能理解,也不会被MySQL本身理解。

我还建议(上面的例子)让整个应用程序使用UTF-8。由于Unicode受到广泛支持,因此ISO8859等单字符编码实际上已经过时了。

答案 1 :(得分:1)

如果有任何非英文字符,我建议使用UTF-8。您可以运行SQL

SET NAMES UTF-8

在连接到dbase后立即以UTF-8建立dbase连接。

执行此操作时,保存数据时不应使用“htmlspecialchars”或“htmlentities”。

答案 2 :(得分:0)

也许您应该使用htmlspecialchars而不是htmlentities,其中第一个只替换HTML特殊字符&<>和{{1}并不是每个可以由命名实体字符引用表示的字符,如后者所做的那样。