Php XML提要数据中的无效字符
我有一个feed,可以从中将数据拉入数据库。它以XML格式提供数据。但是,数据包含“非法”字符。例如:Php XML提要数据中的无效字符,php,xml,utf-8,character-encoding,Php,Xml,Utf 8,Character Encoding,我有一个feed,可以从中将数据拉入数据库。它以XML格式提供数据。但是,数据包含“非法”字符。例如: A GREAT NEIGHBOURHOOD – WITH A 或 或 或 我的问题是,首先,如何识别这些字符的编码,其次,如何更改编码以匹配数据库所期望的UTF8格式 编辑:需要明确的是,这个过程中没有涉及任何数据库(无论如何,在这个过程的这一点上)。数据稍后将插入数据库,但目前我只是通过PHP脚本读取数据,并使用var\u dump在屏幕上打印数据 编辑2:使用PHP库从RETS提要中
A GREAT NEIGHBOURHOOD – WITH A
或
或
或
我的问题是,首先,如何识别这些字符的编码,其次,如何更改编码以匹配数据库所期望的UTF8格式
编辑:需要明确的是,这个过程中没有涉及任何数据库(无论如何,在这个过程的这一点上)。数据稍后将插入数据库,但目前我只是通过PHP脚本读取数据,并使用var\u dump
在屏幕上打印数据
编辑2:使用PHP库从RETS提要中提取数据似乎在某个时候XML源或数据(即UTF-8)被视为ISO-8859-1并转换为UTF-8。根据您生成提要的方式,这可能会在多个点发生 最有可能的一点是数据库连接的编码。确保它是UTF-8
另一种可能是您发送的内容类型标题 请添加您的数据库编码类型,以便我们能够更好地回答 为了检测字符串的编码类型,您需要使用以下代码:
echo mb_detect_encoding("your-string");
您还可以使用此函数从一种编码类型转换为另一种编码类型
$str = mb_convert_encoding($str, $source_encode, $destination_encode);
问题在于UTF-8响应的处理方式不同,或者数据库设置不正确。下面是一些可能发生这种情况以及如何修复的示例 在使用Curl之前
header("Content-Type: text/html; charset=utf-8");
Mysql(my.cnf)
手动创建数据库时
CREATE DATABASE `your_table_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_polish_ci;
使用条令等框架时
$conn = array(
'driver' => 'pdo_mysql',
'dbname' => 'test',
'user' => 'root',
'password' => '*****',
'charset' => 'utf8',
'driverOptions' => array(1002=>'SET NAMES utf8')
);
到底是什么问题?feed不是声明了自己的编码吗,无论是使用
还是HTTP头?@lvaroGonzález——不,编码没有声明——它被假定为UTF8,尽管一些feed提供者没有真正正确地理解它。但是这些字符看起来像实际的UTF-8,被误解为ISO-8859-1:-?请提供一些代码,说明如何接收XML数据并将其放入数据库。这可能很简单,就像使用错误版本的库函数强制执行错误的编码一样(PHP充满了这样的隐藏陷阱)@user101289从哪里提取数据?
header("Content-Type: text/html; charset=utf-8");
[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;
$conn = array(
'driver' => 'pdo_mysql',
'dbname' => 'test',
'user' => 'root',
'password' => '*****',
'charset' => 'utf8',
'driverOptions' => array(1002=>'SET NAMES utf8')
);