gpt4 book ai didi

php - 另一个 PHP XML 解析错误 : "Input is not proper UTF-8, indicate encoding!"

转载 作者:数据小太阳 更新时间:2023-10-29 02:32:27 24 4
gpt4 key购买 nike

错误:

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 中查看源代码的输出):

<?xml version="1.0" encoding="UTF-8" ?><audit><audit_detail>
<fieldname>role_fra</fieldname>
<old_value>Role en fran&#xe7;ais</old_value>
<new_value>Role &#xe7; en fran&#xe7;ais</new_value>
</audit_detail></audit></xml>

如果我没理解错的话,这个错误与 old_value 标签中编码的第一个 ç 有关。准确的说,这个错误是根据bytes: "çais"?

这是我加载 XML 的方式:

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

我循环使用这个:

foreach ($xmlData->audit_detail as $a){
//code here
}

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

我创建 audit_detail stub 的函数:

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


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

$out = <<<EOF
<audit_detail>
<fieldname>{$field}</fieldname>
<old_value>{$old}</old_value>
<new_value>{$new}</new_value>
</audit_detail>
EOF;
return $out;
}

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

function ed_audit_insert($ed, $xml){
global $visitor;

$sql = <<<EOF
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 = <<<EOF
<audit><audit_detail>
<fieldname>role_fra</fieldname>
<old_value>Role en fran&#xe7;ais</old_value>
<new_value>Role &#xe7; en fran&#xe7;ais</new_value>
</audit_detail></audit>
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é en franêais”(新值)显示为:

显示问题:

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

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
...
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

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

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

图标输出:

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

不太确定从这里去哪里......

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

utf8_decode($a->new_value);

输出:

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

最佳答案

ç 是“ç”时,您的编码是 Windows-1252(或者可能是 ISO-8859-1),而不是 UTF-8。

关于php - 另一个 PHP XML 解析错误 : "Input is not proper UTF-8, indicate encoding!",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4662008/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com