我有一个将西班牙语字符存储在MySQL数据库中的站点。所有表格和数据库都配置为UTF-8,并且我可以合理地将其加载到我的本地WAMP设置和主机帐户服务器上。
西班牙语字符在本地完美显示,但在实时服务器上,为重音字符显示可怕的问号符号。只有从DB动态生成的文本才会受到影响,因此可以合理地假设这在某种程度上与我的查询,连接或数据库有关。
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<select multiple class='form-control' name='location[]' id='location'>
encoding: UTF-8<option value='Alhaur�n de la Torre'>Alhaur�n de la Torre</option>
encoding: ASCII<option value='Artola'>Artola</option>
encoding: ASCII<option value='Bel Air'>Bel Air</option>
使用mb_detect_encoding()我的下拉列表如上所示。
我的标题包含:
header('Content-type: text/html; charset=utf-8');
数据库是utf8_general_ci表,服务器连接整理,服务器字符集是UTF-8 Unicode(utf8)
我在PDO数据库连接中使用了SET NAMES utf8。
这让我发疯,为什么它在本地工作但不在我的托管服务器上。经过多次寻找答案,我希望能在这里提供一些指导。
提前致谢
解决:
在我的连接脚本中,我改变了这个:
$dbh = new PDO("mysql:host=$dbHost;dbname=$dbName;", $dbUser, $dbPass);
$dbh->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, 'SET NAMES utf8');
对此:
$dbh = new PDO("mysql:host=$dbHost;dbname=$dbName;", $dbUser, $dbPass, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
并且所有工作都应该如此。
感谢您寻找
答案 0 :(得分:0)
解决:
在我的连接脚本中,我改变了这个:
$dbh = new PDO("mysql:host=$dbHost;dbname=$dbName;", $dbUser, $dbPass);
$dbh->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, 'SET NAMES utf8');
对此:
$dbh = new PDO("mysql:host=$dbHost;dbname=$dbName;", $dbUser, $dbPass, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
并且所有工作都应该如此。
感谢您寻找
答案 1 :(得分:0)
$dbh = new PDO("mysql:host=$dbHost;dbname=$dbName;charset=UTF8", $dbUser, $dbPass);
将字符集添加到pdo连接!