admin管理员组

文章数量:1550527

错误:

Warning: simplexml_load_string()

[function.simplexml-load-string]:

Entity: line 3: parser error : Input

is not proper UTF-8, indicate encoding

! Bytes: 0xE7 0x61 0x69 0x73

数据库中的XML(FF中视图源的输出):

role_fra

Role en français

Role ç en français

如果我理解正确,则该错误与old_value标记中编码的第一个ç有关.确切地说,基于字节的错误与此有关:“çais”?

这是我加载XML的方式:

$xmlData = simplexml_load_string($ed['updates'][$i]['audit_data']);

我通过使用此循环:

foreach ($xmlData->audit_detail as $a){

//code here

}

数据库中的字段为文本数据类型,设置为utf8_general_ci.

我创建audit_detail存根的功能:

function ed_audit_node($field, $new, $old){

$old = htmlentities($old, ENT_QUOTES, "UTF-8");

$new = htmlentities($new, ENT_QUOTES, "UTF-8");

$out = <<

{$field}

{$old}

{$new}

EOF;

return $out;

}

在数据库中的插入是这样完成的:

function ed_audit_insert($ed, $xml){

global $visitor;

$sql = <<

INSERT INTO ed.audit

(employee_id, audit_date, audit_action, audit_data, user_id)

VALUES (

{$ed[emp][employee_id]},

now(),

'{$ed[audit_action]}',

'{$xml}',

{$visitor[user_id]}

);

EOF;

$req = mysql_query($sql,$ed['db']) or die(db_query_error($sql,mysql_error(),__FUNCTION__));

}

最奇怪的部分是以下内容在一个简单的PHP文件中有效(尽管没有xml声明):

$testxml = <<

role_fra

Role en français

Role ç en français

EOF;

$xmlData = simplexml_load_string($testxml);

有人可以帮忙阐明一下吗?

编辑#1-我现在正在使用DOM来构建XML文档,并且摆脱了错误.功能在这里:

$dom = new DomDocument();

$root = $dom->appendChild($dom->createElement('audit'));

$xmlCount = 0;

if($role_fra != $curr['role']['role_fra']){

$root->appendChild(ed_audit_node($dom, 'role_fra', $role_fra, $curr['role']['role_fra']));

$xmlCount++;

}

...

function ed_audit_node($dom, $field, $new, $old){

//create audit_detail node

$ad = $dom->createElement('audit_detail');

$fn = $dom->createElement('fieldname');

$fn->appendChild($dom->createTextNode($field));

$ad->appendChild($fn);

$ov = $dom->createElement('old_value');

$ov->appendChild($dom->createTextNode($old));

$ad->appendChild($ov);

$nv = $dom->createElement('new_value');

$nv->appendChild($dom->createTextNode($new));

$ad->appendChild($nv);

//append to document

return $ad;

}

if($xmlCount != 0){

ed_audit_insert($ed,$dom->saveXML());

}

但是,我认为我现在有一个显示问题,因为此文本“Roééleçséenfranêais”(new_value)显示为:

显示问题:

在我的HTML文档中,我对内容类型声明了以下内容(不幸的是,我没有在此处进行更改的键):

...

我已经尝试过iconv()转换为ISO-8859-1,但是,大多数特殊字符在进行转换时都会被删除.使用此命令,仅剩下“ Ro”:

iconv('UTF-8','ISO-8859-1',$node->new_value);

iconv输出:

数据库中的字段是:utf8_general_ci.但是,连接字符集将是默认值.

不太确定从这里去哪里…

编辑#2-我尝试utf8_decode看看是否有帮助,但没有帮助.

utf8_decode($a->new_value);

输出:

我还注意到数据库中的字段确实包含UTF-8.哪个好

解决方法:

当ç为“ç”,则您的编码为Windows-1252(或ISO-8859-1),而不是UTF-8.

标签:simplexml,xml,parsing,php

来源: https://codeday.me/bug/20191208/2094393.html

本文标签: 不正确特殊字符错误PHPXML