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_Character Encoding - Fatal编程技术网

PHP将重音字符导出到XML失败

PHP将重音字符导出到XML失败,php,xml,character-encoding,Php,Xml,Character Encoding,我正在将重音字符从mySQL数据库导出到XML,但得到的结果非常不稳定 基本上,mySQL表设置为拉丁1编码。不理想。然而,所有的输入都是通过HTML实体运行的,这似乎工作得很好;我整天都能读回数据,而且在屏幕上看起来是正确的 这是一个示例项目 在屏幕上,它看起来像这样: me hace reír 注意带重音的“i”字符(带有尖锐的重音) 在数据库中,它的存储方式如下: me hace reí;r 带有acute的“i”正确地替换为HTML实体,这允许在屏幕上正确显示。如果我把它包装

我正在将重音字符从mySQL数据库导出到XML,但得到的结果非常不稳定

基本上,mySQL表设置为拉丁1编码。不理想。然而,所有的输入都是通过HTML实体运行的,这似乎工作得很好;我整天都能读回数据,而且在屏幕上看起来是正确的

这是一个示例项目

在屏幕上,它看起来像这样:

me hace reír

注意带重音的“i”字符(带有尖锐的重音)

在数据库中,它的存储方式如下:

me hace reí;r

带有acute的“i”正确地替换为HTML实体,这允许在屏幕上正确显示。如果我把它包装在一个文本区域内,它仍然能正确地读取——没有尖锐的HTML实体,只有他正确的重音“I”字符

我的XML文件上有一个正确的UTF-8头:


í
是一个命名的(X)HTML实体。它们在基本的、格式良好的XML中是未知的/无效的。将其转换为UTF-8是正确的方法。但从某个角度看,您将带有解码实体的UTF-8字符串视为拉丁语-1。
Ã
是一种典型的症状

下面是一个引发该行为的演示:

$data = 'me hace reír';

$decoded = html_entity_decode($data, ENT_COMPAT, "UTF-8");
$treatedAsLatin1 = utf8_encode($decoded);

var_dump(
    $decoded, $treatedAsLatin1
);
输出:

string(13) "me hace reír"
string(15) "me hace reír"

utf8\u encode()
是一个旧的PHP函数,用于将拉丁语-1字符串转换为UTF-8。但是,这也可以在浏览器中发生(取决于您的HTTP头)。

我觉得这看起来像是合适的UTF-8。如何读取文件以检查它?使用
将其导出到XML
是否使用解析器?你能添加更多相关的PHP代码吗?我正在用Vim打开XML文件,也在notepad和notepad plus中试用过。都是一样的。此外,当我将文件传递给另一个脚本来读取它以创建PDF时,它会引入这些不稳定的字符。前后呼应给了我“í;”与重音“i”的对比。但是,强调的i(应该是合法的UTF)会进入XML。我所做的就是把我连接的XML字符串的内容放进一个文件中。好的,我有更多的信息。如果我使用
html\u entity\u decode($string,ENT\u COMPAT,“ISO8859-1”)将其转换为8859-1,效果非常好。XML看起来很完美。除了当我尝试将XML加载到应用程序的另一半(通过fPDF/fPDI创建PDF)时,它会阻塞非UTF-8输入。如果我使用
html\u entity\u decode($string,ENT\u COMPAT,“UTF-8”),它使XML变得毫无意义。这将生成一个PDF好的。。。带有无意义的重音字符。双倍发球效率。