XML Feed数据中的字符无效

时间:2015-11-12 17:30:27

标签: php xml utf-8 character-encoding

我有一个Feed,我将数据从中提取到数据库中。它以XML格式提供数据。但是,数据包括“非法”字符。例如:

A GREAT NEIGHBOURHOOD – WITH A

large “country style†eat-in

Garage 14’x32’, large

 OR…….ENDLESS POSSIBILITIES!! 

我的问题首先是如何识别这些字符的编码,其次,如何更改编码以匹配我的数据库所需的UTF8格式?

编辑:要清楚,此过程中没有涉及数据库(此时此过程中,无论如何)。数据将在稍后插入数据库,但此刻我只是通过PHP脚本读取数据并使用var_dump在屏幕上打印。

编辑2:使用PHP PHRETS库从RETS Feed中提取数据

3 个答案:

答案 0 :(得分:7)

问题是您的UTF-8响应以不同的方式处理,或者数据库未正确设置。这里有一些关于这可能发生的例子以及如何修复它。

使用卷曲之前

header("Content-Type: text/html; charset=utf-8");

Mysql(my.cnf)

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

手动创建数据库时

CREATE DATABASE `your_table_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_polish_ci;

使用Doctrine等框架

$conn = array(
    'driver' => 'pdo_mysql',
    'dbname' => 'test',
    'user' => 'root',
    'password' => '*****',
    'charset' => 'utf8',
    'driverOptions' => array(1002=>'SET NAMES utf8')
);

答案 1 :(得分:4)

似乎在某些时候,XML源或数据(即UTF-8)被视为ISO-8859-1并转换为UTF-8。根据您生成Feed的方式,这可能会在几个点发生。

最可能的一点是数据库连接的编码。确保它是UTF-8。

另一种可能性是您发送的内容类型标题。

答案 2 :(得分:4)

请添加您的数据库编码类型,以便我们更好地回答。

为了检测字符串的编码类型,您需要使用mb_detect_encoding,如下所示:

count

您也可以使用此功能从一种编码类型转换为另一种编码类型

duration