当我将XML文件中的特定字符读取到PHP文件时,我遇到了一个问题。
我使用像“ä”、“ü”和“ö”这样的字符。我得到以下错误:
simplexml_load_string()[function.simplexml-load-String]:实体:第96行:解析器错误:输入不正确的UTF-8,指示编码!字节:0xFC 0x73 0x65 0x0C
您得到的XML字符串没有正确编码。默认编码是UTF-8
,但是您得到的字符串不同,很可能是Windows-1252
。
如果你想让这个错误消失,你需要将这个字符串(通过你问题中缺失的信息:)从未知编码重新编码为UTF-8。
由于未知的编码被破坏,您需要首先找出/了解字符串的编码。
然后,您可以将其转换为UTF-8,或者将编码插入XML字符串中,这很容易通过xmlrecord
检查和修改基于XML声明和BOM的XML文档的字符编码。它的部分内容在PHP XMLReader中进行了解释,获得了关于XMLReader的版本和编码,但与SimpleXML一样,它也是一个基于libxml的PHP XML扩展,并共享了一些共同点,因此这是可行的。
用法示例:
$buffer = file_get_contents($file);
$fromEncoding = 'WINDOWS-1252'; # insert *your* correct string encoding here
$recoder = new XMLRecoder();
$buffer = $recoder->setEncodingDeclaration($buffer, $fromEncoding);
$sxml = simplexml_load_string($buffer);
为了更好地理解PHP中的XML编码以及可用的字符集编码和名称,请参阅:
PHP5和早期版本没有原生Unicode支持。promise支持Unicode的PHP6或PHP7可能需要几年时间。为了弥补这一差距,有几个扩展,如mbstring、iconv和intl。
确保发送带有适当内容类型和编码的HTML响应,例如。
<?php header('Content-Type: text/html; charset=utf-8');?>
还要检查XML文件序言是否包含正确的编码,例如。
<?xml version="1.0" encoding="UTF-8"?>
假设这一切都是正确的,看起来xml文件声称是UTF-8,但实际上是别的东西(可能是latin1或ISO-8859-1或Mojibake。)。您可以在您最喜欢的编辑器中手动打开XML文件(我喜欢Sublime),并用UTF8编码显式保存文件。或者您可以使用一个函数在加载前尝试修改字符串。就像来自:错误:“输入不是正确的UTF-8,指示编码!”使用PHP的simplexml_load_string
function fix_latin1_mangled_with_utf8_maybe_hopefully_most_of_the_time($str)
{
return preg_replace_callback('#[\\xA1-\\xFF](?![\\x80-\\xBF]{2,})#', 'utf8_encode_callback', $str);
}
function utf8_encode_callback($m)
{
return utf8_encode($m[0]);
}
但是归根结底,它会很混乱,PHP似乎仍然没有像我们希望的那样处理Unicode,而且它根本没有内置到核心中。
我们建议您查看便携式UTF-8-一个用于PHP中Unicode处理的轻量级库。
问题内容: 我正在尝试使用php从文本文件中读取特定行。这是文本文件: 我如何使用php获取第二行的内容?这将返回第一行: ..但我需要第二个。 任何帮助将不胜感激 问题答案: 文件—将整个文件读入数组
我在从xml文件中读取信息时遇到了一点问题... 传给我的文件有几千行。我只对300-400行感兴趣。当用户完成操作并且要读取的数据可以存储在中时,我不需要将任何数据写回xml。 我只对最内部名称元素的感兴趣(前两个是“098-0031”和“098-0032”)。 这是我的代码: 但是条件从来没有填满...谁能给我解释一下为什么。也许可以向我展示一种简单的方法来将这些值存储在中?提前感谢! 编辑:
问题内容: 我正在尝试使用Java读取文件,并且该文件还包含特殊字符。我正在尝试将文件的内容写入另一个文件。 读取特殊字符文件的解决方案是什么? 问题答案: 您需要找出文件使用的确切编码,然后在参数中指定该编码。 尽管如此,通常最好通过将InputStream与InputStreamReader一起包装到Reader或BufferedReader中来读取字符数据 编辑注释: 使用Java的平台默认
问题内容: 我不是在谈论特定的行号,因为我正在读取具有相同格式但长度不同的多个文件。 说我有这个文本文件: 我希望你知道我的意思。我正在考虑遍历文件,然后使用正则表达式搜索以找到“开始”和“结束”的行号,然后使用线缓存从开始行读取到结束行。但是如何获得行号?我可以使用什么功能? 问题答案: 如果您只想要和之间的文本块,则可以执行以下操作: 实际上,您不需要操纵行号即可读取开始和结束标记之间的数据。
问题内容: 我对此有一个文件模拟:… 我想从存在“ HDK1001”字样的行开始阅读,并在世界“ HDK7564”字样处结束阅读 我尝试使用此代码,但无法执行限制 请帮帮我 问题答案: 试试这个代码。
问题内容: 有什么方法可以从文本文件中读取特定行?在API或Apache Commons中。就像是 : 我同意实现起来很简单,但是特别是当文件很大时,效率不是很高。 问题答案: 可以,但是仍然存在效率问题。 或者,您可以使用: 由于有缓冲,这将稍微更有效。 看一下并尝试跳过整行(使用正则表达式)。我无法确定它是否会更有效- 对其进行基准测试。 PS 代表 效率, 我的意思是 记忆效率