2010-07-04 5 views
1

Voici le codecurl php, étiquette lien modification sur le site Web de proxy, ne fonctionne pas pleinement

<?php 
$url='http://isrc.ulster.ac.uk'; 
$var = fread_url($url);// function calling to get the page from curl 
$i=0; 
$linklabel = array(); 
$linklabelmod = array(); 
$link = array(); 
$dom = new DOMDocument(); 
@$dom->loadHTML($var); 
$xpath = new DOMXPath($dom); 

foreach($xpath->query('//a') as $element) { 
    $linklabel[] = $element->textContent; 
    $link[] = $element->getAttribute("href"); 
    $i=$i+1; 
} 

for($k=0;$k<$i;$k++) { 
    $linklabelmod[$k] = str_replace($linklabel[$k], $linklabel[$k]."[$k]", $linklabel[$k]); 
    $var = preg_replace("/\\Q$linklabel[$k]\\E/", $linklabelmod[$k], $var, 1);//modifying link labels 
} 
print $var; 
function fread_url($url){ 
    if(function_exists("curl_init")){ 
     $ch = curl_init(); 
     $user_agent = "Mozilla/4.0 (compatible; MSIE 5.01; "."Windows NT 5.0)"; 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); 
     curl_setopt($ch, CURLOPT_HTTPGET, 1); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION , 1); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION , 1); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 
     $html = curl_exec($ch); 
     //print $html;//will printing the web page . 
     curl_close($ch); 
    } 
    else{ 
     $hfile = fopen($url,"r"); 
     if($hfile){ 
      while(!feof($hfile)){ 
       $html.=fgets($hfile,1024); 
      } 
     } 
    } 
    return $html; 
} 
?> 

Toutes les étiquettes de liaison sont en train de changer. Je veux que chaque étiquette de lien soit modifiée en attachant un nombre unique. Plz exécuter le code afin que vous puissiez voir l'erreur .. Thx à l'avance ..

+0

Que diriez-vous de nous dire ce qu'est l'erreur? –

+0

Toutes les étiquettes de liens ne sont pas modifiées. seulement certains fonctionnent parfaitement. et si je change l'URL en "bbc.com", il montre une erreur comme avertissement: preg_replace() [function.preg-replace]: modificateur inconnu '0' dans C: \ wamp \ www \ test \ f.php sur la ligne 20 –

+0

Quelqu'un m'aider plz ....... –

Répondre

0

Qu'en est-il de vérifier si une correspondance a été trouvée avant de tenter de le remplacer? En utilisant preg_match.

Ce n'est pas mon intention de ruiner votre question en demandant cela, mais comment répondrait-on à quelqu'un d'autre commentaire? Je ne vois que le 'ajouter un commentaire' sur mes propres commentaires, merci.

+0

mais je suis un noob et je ne sais pas impliquer des expressions spécifiques preg_match? plz aide avec un exemple .... –

+0

'if (preg_match ("/\\ Q $ linklabel [$ k] \\ E/", $ var))' au-dessus de votre appel preg_replace le ferait probablement. EDIT: à moins qu'il ne se plaint en fait de la syntaxe regexp réelle. Si c'est le cas, essayez quelque chose de similaire '' /".$ linkLabel [$ k]. "/ I" ' – eklundchristopher

+0

non, cela ne fonctionne pas, voici le code actuel ... $ dom = new DOMDocument(); @ $ dom-> loadHTML ($ var); $ xpath = new DOMXPath ($ dom); foreach ($ xpath-> requête ('// a') en tant qu'élément $) { $ linklabel [] = $ élément-> textContent; $ link [] = $ element-> getAttribute ("href"); \t $ i = $ i + 1; } pour ($ k = 0; $ k <$ i; $ k ++) { \t $ linklabelmod [$ k] = str_replace ($ linklabel [$ k], $ lienlabel [$ k]. "[$ K ] ", $ linklabel [$ k]); \t if (preg_match ("/ \\ Q $ linklabel [$ k] \\ E /", $ var)) \t $ var = preg_replace ("/ \\ Q $ linklabel [$ k] \\ E /" , $ linklabelmod [$ k], $ var, 1); } imprimer $ var; // imprimer page web –

Questions connexes