UTF-8特殊字符作为奇怪的字符插入表中

时间:2013-06-27 10:56:47

标签: php mysql xml

我在这个网站上搜索了很多答案,但没有一个对我有用。我试图使用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')");

请帮帮我。提前感谢你们。

2 个答案:

答案 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)