我在数据库中有包含特殊字符的单词(主要是西班牙语,如波浪号).在数据库中,所有内容都保存并使用PHPmyAdmin正确显示,但是当我获取数据(使用PHP)并在浏览器中显示时,我得到一个奇怪的字符,如"?" 有一个正方形...我需要一个通用的修复,所以我不需要每次都逃避每个字符,而且我也可以将PHP格式的特殊西班牙语字符插入到数据库中...
HTML是正确的:
所有表和数据库都设置为utf8_spanish
我得到的角色:
有什么建议???
谢谢!!!
我想提供一些关于vartec提出的解决方案的更多细节,这是(根据您的MySQL安装)最正确的问题解决方案.首先,MySQL中的字符集/编码问题是一个有点复杂的主题,在MySQL手册第9.1章"字符集支持"中有详细介绍.在你的情况下特别是9.1.4."连接字符集和排序"将是最相关的.
简而言之:MySQL必须知道客户端应用程序的哪个字符集/编码(从数据库说话,这是你的PHP脚本)所期望的,因为它将转换来自server-中定义的内部字符集/编码的所有字符串数据,数据库,表或列级别进入连接字符集/编码.您在客户端使用UTF-8,因此必须告诉MySQL您使用的是UTF-8.这是通过MySQL命令完成的,该命令SET NAMES 'utf8'
必须作为打开连接的第一个查询发送.根据您的安装以及您在PHP脚本中使用的MySQL客户端库,这可以在每次连接时自动完成.
如果您使用PDO,只需设置配置参数即可
$db = new PDO($dsn, $user, $password); $db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
使用mysqli更改客户端字符集/编码更加简单:
$mysqli = new mysqli("localhost", "user", "password", "db"); $mysqli->set_charset("utf8");
我希望这将有助于使整个事情更容易理解.
SET NAMES 'utf8'
连接后立即发行:
$mysqli = new mysqli("localhost", "user", "password", "database"); $mysqli->query("SET NAMES 'utf8'");
让MySQL自动翻译它
$conn = mysql_connect('host', 'user', 'password'); mysql_set_charset('utf8',$conn);
http://es.php.net/manual/en/function.mysql-set-charset.php
编辑:从我的评论中我收集到,这实际上是用latin1编码的
mysql_set_charset('latin1_spanish_ci',$conn);