Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.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抓取页面会导致意外字符_Php_Html_Character Encoding_Web Scraping - Fatal编程技术网

使用PHP抓取页面会导致意外字符

使用PHP抓取页面会导致意外字符,php,html,character-encoding,web-scraping,Php,Html,Character Encoding,Web Scraping,好的,我使用PHP从网页中提取一些数据,并以某种方式引入一些源文档中不存在的意外字符。我认为这是由于我解释了错误的字符编码,尽管我不确定如何解决这个问题 下面是一个HTML示例,给出了错误 <tr> <td>Aug 2013</td> <td>TEDxColbyCollege</td> <td> <a href="/talks/daniel_h_cohen_for_argumen

好的,我使用PHP从网页中提取一些数据,并以某种方式引入一些源文档中不存在的意外字符。我认为这是由于我解释了错误的字符编码,尽管我不确定如何解决这个问题

下面是一个HTML示例,给出了错误

<tr>
    <td>Aug 2013</td>
    <td>TEDxColbyCollege</td>
    <td>
        <a href="/talks/daniel_h_cohen_for_argument_s_sake.html">Daniel H. Cohen: For argument’s sake</a>       </td>
   . 
   . 
   . 
// more of the table 
文件的标题表明

 <!doctype html>
 <html lang="en">
 <head>
 <meta charset="utf-8">
 .
 .
 </head>

两者都导致输出看起来像这样
danielh.Cohen:For argument€™s sake

尽管在回音时以及在我的数据库表中使用html文档头部的这一行(显示数据时)文本仍然出现配置错误,但请正确呈现

 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

即使正确应用了
htmlspecialchars\u decode()
html\u entities\u decode()
、以及
mb\u convert\u encoding()
,这个问题也很难解决

我使用Sebastián Grignoli的
forceUTF8()
函数的修改版本来完全清理字符串。我不知道还有什么比它更适合php的了

您可以找到该函数的一个版本

如果你真的需要一个全面的清理,不管涉及的字符,这会给惊人的结果

以下是来自的示例

用法示例:

$utf8_string = Encoding::fixUTF8($garbled_utf8_string);
示例:

echo Encoding::fixUTF8("Fédération Camerounaise de Football");
echo Encoding::fixUTF8("FÃédÃération Camerounaise de Football");
echo Encoding::fixUTF8("FÃÃédÃÃération Camerounaise de Football");
echo Encoding::fixUTF8("FÃÃÃédÃÃÃération Camerounaise de Football");
将输出:

Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football

编辑


另外,请注意,如果使用基于web的DB浏览器(如phpMyAdmin),则在DB中存储的字符编码与网页定义的编码之间可能会遇到字符差异。我曾经遇到过这样的情况:数据库中存储的内容完全正确,但从界面上看似乎是错误的。

$html=file\u get\u contents(“html页面的url\u被废弃”)
是您放置
的页面吗?不,我没有在那里放置任何东西。被废弃的html页面的
url处的文档头显示为
这就是我真正的意思:)好吧,我不知道这是否适合你,但我有类似的问题,在加载的内容周围放一个utf8_encode()就成功了。我不知道这是否更像是一个未经证实的黑客行为。。。但是试试看:
$doc->loadHTML(utf8_encode($html))嘿,谢谢你的主意,但是运气不好,我还是得到了相同的结果。这有帮助吗?谢谢你的建议,我尝试了它,但仍然没有得到正确编码的字符串返回,似乎已经有一个问题在该项目上为它打开,并将继续关注它,以备将来可能使用!很乐意帮忙!此外,如果讨论的开放问题是,我似乎记得使用a将这些字符转换为可管理的字符(即:
preg\u replace('/\p{Zs}/','$htmlString)
)。虽然这似乎很奇怪,如果这是你的问题。
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
echo Encoding::fixUTF8("FÃédÃération Camerounaise de Football");
echo Encoding::fixUTF8("FÃÃédÃÃération Camerounaise de Football");
echo Encoding::fixUTF8("FÃÃÃédÃÃÃération Camerounaise de Football");
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football