Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.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 将非UTF-8文本转换为可显示的HTML-这些亚洲字符是什么?_Php_Html_Regex_Encoding_Utf 8 - Fatal编程技术网

Php 将非UTF-8文本转换为可显示的HTML-这些亚洲字符是什么?

Php 将非UTF-8文本转换为可显示的HTML-这些亚洲字符是什么?,php,html,regex,encoding,utf-8,Php,Html,Regex,Encoding,Utf 8,我们需要能够从具有未知字符编码的HTML文件中获取内容,修改内容,然后将其显示在用户的浏览器中。我创建的任何测试文件都可以完美地工作,但我们从客户那里获取的一些文件却不能。这些文件将不会被修改,因为代码使用regex搜索内容,它们将在浏览器中显示奇数字符,通常是一堆我在页面底部无法识别的亚洲字符 我尝试过utf8_编码、htmlspecialchars、iconv,甚至我希望能够处理这个问题的第三方API。到目前为止,一切都不起作用 如果我在Sublime中打开其中一个有问题的HTML文件,一切

我们需要能够从具有未知字符编码的HTML文件中获取内容,修改内容,然后将其显示在用户的浏览器中。我创建的任何测试文件都可以完美地工作,但我们从客户那里获取的一些文件却不能。这些文件将不会被修改,因为代码使用regex搜索内容,它们将在浏览器中显示奇数字符,通常是一堆我在页面底部无法识别的亚洲字符

我尝试过utf8_编码、htmlspecialchars、iconv,甚至我希望能够处理这个问题的第三方API。到目前为止,一切都不起作用

如果我在Sublime中打开其中一个有问题的HTML文件,一切看起来都很完美。如果我使用vim查看它,我会看到前面的
。如果我尝试使用上述PHP函数中的一个来更正此文件,我会在文件开头的2个s处得到6个无法识别的字符,并且在每小于一个符号之前得到1个无法识别的字符。(大于不受影响。)

如果我将其中一个文件的内容从Sublime直接复制/粘贴到代码中,正则表达式工作正常,HTML显示完美

如果我将正则表达式简化为忽略少于个符号(其中一些搜索HTML标记),它们仍然不会检测到任何匹配项,即使应该匹配的部分不包含无法识别的字符


我知道的太多了,但这已经让我头晕目眩了好几天了。任何洞察都是英雄式的。

我们解决这个问题的最佳方法是使用DOMDocument的loadHTMLFile()方法。

这是在Vim中显示的UTF-16,它是一个不可见的信息字符,表示为
;这不是文本值,这就是为什么您的正则表达式不匹配的原因。我的正则表达式实际上是在寻找带有href的标记,并且不在任何这些标记中,只是在开头。它会导致我的正则表达式失败吗?是的-文件本身是用UTF-16编码的,它在
preg.*
函数中,因此您需要先将文件转换为UTF-8;你可能想看看,我的一个同事也推荐了这个。它应该可以工作,但md_detect_编码不幸返回false。一个又一个的路障。