simple_html_dom忽略特殊字符

问题描述:

我使用的代码是下面的代码,在我遇到具有日文字符或任何特殊字符的URL之前,这项工作完全正常。我观察过这个问题,它似乎只是在URL包含特殊字符(如日语)时才返回域名,结果我不断收到随机结果,我不打算检索。simple_html_dom忽略特殊字符

include_once 'simple_html_dom.php'; 
header('Content-Type: text/html; charset=utf-8'); 

$url_link = 'http://kissanime.com/Anime/Knights-of-Ramune-VS騎士ラムネ&40FRESH'; 

$html = file_get_html($url_link); 
echo $html->find('.bigChar', 0)->innertext; 

我应该得到“Ramune骑士”的结果,因为这是我试图检索的元素。相反,$ url_link被重定向到域名'http://kissanime.com/',没有'动漫/骑士骑士VS骑士ラムネ&40FRESH'。从那里,它会查找具有“.bigChar”值的类,从而得到随机值。

+0

您应该回显$ html以查看您是否正确检索页面。 – 2014-09-01 15:40:11

+0

它只是将我重定向到域名只有 – 2014-09-01 15:51:48

+0

然后问题不是与simple_html_dom,而是与file_get_html。我怀疑网址是否允许包含特殊字符,但我没有参考资料。 – 2014-09-01 15:59:40

真正的问题域是,如何使用UTF-8字符的URL而不是simple_html_dom检索数据。

首先,我们需要编码字符:

$url_link = 'http://kissanime.com/Anime/Knights-of-Ramune-VS騎士ラムネ&40FRESH'; 

$strPosLastPart = strrpos($url_link, '/') + 1; 
$lastPart  = substr($url_link, $strPosLastPart); 
$encodedLastPart = rawurlencode($lastPart); 
$url_link  = str_replace($lastPart, $encodedLastPart, $url_link); 

Normaly这应该工作。由于我测试了它,它不起作用。所以我在问为什么会发生这种错误,并使用CURL进行了一次呼叫。

未将对象引用设置为对象的实例。说明:执行当前Web 请求期间发生未处理的异常 。请查看堆栈跟踪以获取有关 错误以及源代码的更多信息。

异常详细信息:System.NullReferenceException:对象引用不是 设置为对象的实例。

现在我们知道,这个页面是用ASP.NET编写的。但我问我,为什么它不工作。我添加了一个用户代理,瞧:

$ch = curl_init($url_link); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0'); 
$data = curl_exec($ch); 
echo $data; 

所有在一起(工作):

$url_link = 'http://kissanime.com/Anime/Knights-of-Ramune-VS騎士ラムネ&40FRESH'; 

//Encode Characters 
$strPosLastPart = strrpos($url_link, '/') + 1; 
$lastPart  = substr($url_link, $strPosLastPart); 
$encodedLastPart = rawurlencode($lastPart); 
$url_link  = str_replace($lastPart, $encodedLastPart, $url_link); 

//Download Data 
$ch = curl_init($url_link); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0'); 
$data = curl_exec($ch); 

//Load Data into Html (untested, since i am not using this Lib) 
$html = str_get_html($data); 

现在的区别是,读$data到您的simple_html_dom.php类,而不是file_get_html

干杯

+0

如何使用simple_html_dom.php扩展来应用此操作? – 2014-09-01 16:19:55

+0

不知道这个lib,但是'str_get_html($ data)'呢? – 2014-09-01 16:23:21

+0

这工作得很好,谢谢! – 2014-09-01 18:26:06