我有一个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中提取数据
答案 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