我在这个网站上搜索了很多答案,但没有一个对我有用。我试图使用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')或标题('Content-Type:text / html; charset = utf-8')时,结果为:
SimpleXMLElement Object
(
[name] => Peter
[country] => Großbritannien
)
但是当我尝试在数据库(MySQL)中使用PHP(标题设置为utf8)插入国家/地区值时,其插入为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')");
请帮帮我。提前感谢你们。
答案 0 :(得分:1)
在插入查询上方插入
mysql_query('SET NAMES utf8');
AS @deceze指出最好使用
mysql_set_charset('utf8');
答案 1 :(得分:1)
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版本&gt; = 5.3.6)