2014-09-01 6 views
1

Le code que j'utilise est celui ci-dessous, cela fonctionne parfaitement bien jusqu'à ce que je rencontre url avec un caractère japonais ou des caractères spéciaux. J'ai observé ce problème et il semble qu'il retourne seulement le nom de domaine quand l'URL contient des caractères spéciaux tels que le japonais, par conséquent j'ai continué à obtenir des résultats aléatoires que je n'ai pas l'intention de récupérer.simple_html_dom ignore les caractères spéciaux

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; 

Je devrais obtenir un résultat des « Chevaliers de Ramune » puisque c'est l'élément que je tente de récupérer. Au lieu de cela, le $ url_link a été redirigé vers le nom de domaine qui est le 'http://kissanime.com/' sans 'Anime/Chevaliers-de-Ramune-VS & 40FRESH'. Et à partir de là, il cherche la classe avec une valeur de '.bigChar' qui résulte de donner une valeur aléatoire.

+0

Vous devriez écrire $ html pour voir si vous récupérez la page correctement. –

+0

Il me redirige juste vers le nom de domaine seulement –

+0

Ensuite, le problème n'est pas avec simple_html_dom, mais avec file_get_html. Je doute que les URL puissent contenir des caractères spéciaux, mais je n'ai pas de référence à portée de main. –

Répondre

0

Le domaine de problème réel est, comment récupérer les données en utilisant une URL avec des caractères UTF-8, pas simple_html_dom.

Tout d'abord, nous avons besoin de coder les caractères:

$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 cela devrait fonctionner. Depuis que je l'ai testé, ça n'a pas marché. Donc, je demande pourquoi cette erreur se produit, et fait un appel en utilisant CURL.

La référence d'objet n'est pas définie sur une instance d'un objet. Description: Une exception non gérée s'est produite lors de l'exécution de la demande Web actuelle . Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails d'exception: System.NullReferenceException: référence d'objet non définie sur une instance d'un objet.

Maintenant nous savons, cette page est écrite en ASP.NET. Mais je me demandais, pourquoi ça ne marche pas. J'ai ajouté un agent utilisateur, et le tour est joué:

$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; 

Tous ensemble (travail):

$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); 

Maintenant, la différence serait, de lire $data dans votre classe simple_html_dom.php, au lieu de file_get_html.

Salutations

+0

Comment l'appliquer en utilisant l'extension simple_html_dom.php? –

+0

Je ne connais pas cette lib, mais qu'en est-il de 'str_get_html ($ data)'? –

+0

Cela fonctionne très bien merci! –

Questions connexes