当前位置:  开发笔记 > 编程语言 > 正文

PHP/MySQL中的特殊字符

如何解决《PHP/MySQL中的特殊字符》经验,为你挑选了3个好方法。

我在数据库中有包含特殊字符的单词(主要是西班牙语,如波浪号).在数据库中,所有内容都保存并使用PHPmyAdmin正确显示,但是当我获取数据(使用PHP)并在浏览器中显示时,我得到一个奇怪的字符,如"?" 有一个正方形...我需要一个通用的修复,所以我不需要每次都逃避每个字符,而且我也可以将PHP格式的特殊西班牙语字符插入到数据库中...

HTML是正确的:


所有表和数据库都设置为utf8_spanish

我得到的角色:

有什么建议???

谢谢!!!



1> Stefan Gehri..:

我想提供一些关于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");

我希望这将有助于使整个事情更容易理解.



2> Quassnoi..:

SET NAMES 'utf8'连接后立即发行:

$mysqli = new mysqli("localhost", "user", "password", "database");
$mysqli->query("SET NAMES 'utf8'");



3> vartec..:

让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);

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有