我在这个网站上搜索了很多答案,但没有一个对我有用。我正在尝试使用 PHP simplexml_load_string 解析以下 XML。
我的 XML 是:
<?xml version="1.0" encoding="utf-8"?>
<address>
<name>Peter</name>
<country>Großbritannien</country>
</address>
当我使用 print_r 打印它时,结果显示如下:
SimpleXMLElement Object
(
[name] => Peter
[country] => Großbritannien
)
当我使用 ini_set('default_charset', 'UTF-8') 或 header('Content-Type: text/html; charset=utf-8') 时,结果是:
SimpleXMLElement Object
(
[name] => Peter
[country] => Großbritannien
)
但是当我尝试使用 PHP( header 设置为 utf8)在数据库(MySQL)中插入国家/地区值时,它会插入为 Groàbritannien。我的表字符集是 UTF8,列的排序规则是 utf8_unicode_ci。但是,当我直接将国家/地区值插入表中(使用 phpMyAdmin 或终端)时,它会正确插入。
我想知道为什么国家/地区值没有从我的 PHP 解析页面正确插入。
我的 PHP 示例代码如下:
$notificationXml = simplexml_load_string($xml);
$con = $notificationXml->country;
mysql_query("INSERT INTO test_1 (con) values ('$con')");
请帮帮我。提前感谢大家。
最佳答案
a) 提供 mysql_* 函数的扩展被标记为已弃用。最好从 pdo_mysql or mysqli 开始
b) 你必须照顾connection charset ,即 MySQL 服务器希望客户端在发送/接收数据时使用的字符集。避免使用诸如 SET NAMES ... 之类的东西,因为它会让客户端 mysql 库对新的字符集/编码规则一无所知,因此某些字符处理可能无法按预期工作,甚至可能导致安全相关问题。请改用专用的客户端机制来更改字符集。对于 mysql_* 来说是 mysql_set_charset() ., 对于 mysqli_* mysqli::set_charset()对于 PDO,您应该将该信息放入 DSN 中,例如
$pdo = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8')
(并使用 php 版本 >= 5.3.6)
关于php - UTF-8 特殊字符作为奇怪字符插入表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17341293/