Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php XML提要数据中的无效字符_Php_Xml_Utf 8_Character Encoding - Fatal编程技术网

Php 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提要中

我有一个feed,可以从中将数据拉入数据库。它以XML格式提供数据。但是,数据包含“非法”字符。例如:

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')
);