我在数据库中有包含特殊字符的单词(大多数情况下为西班牙语,如波浪号)。在数据库中,所有内容均已保存并使用PHPmyAdmin正确显示,但是当我获取数据(使用PHP)并将其显示在浏览器中时,我得到了一个奇怪的字符,例如“?”。用一个正方形...我需要一个一般性的修补程序,因此我不必每次都转义每个字符,而且我还可以将PHP表单中的特殊西班牙字符插入数据库中...
HTML是正确的:
所有表和数据库都设置为utf8_spanish我得到的角色:
有什么建议么???
谢谢!!!
我只想提供有关vartec提出的解决方案的更多详细信息,这是(取决于您的MySQL安装)最适合您的问题的解决方案。首先,MySQL中的字符集/编码问题是一个有点复杂的主题,MySQL手册第9.1章“字符集支持”对此进行了广泛讨论。在您的情况下,尤其是9.1.4。“连接字符集和排序规则”将是最相关的。
简而言之:MySQL必须知道客户端应用程序期望使用哪种字符集/编码(从与您的PHP脚本进行数据库渗透性交谈),因为它将对服务器端定义的内部字符集/编码中的所有字符串数据进行转码,数据库,表或列级别转换为连接字符集/编码。您在客户端使用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"); 我希望这将有助于使整个事情更容易理解。来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。