2009-08-09 6 views
2

J'ai rencontré un problème difficile à résoudre. Je remplace a-tags et img-tags pour adapter mes suggestions comme ceci. Jusqu'ici tout va bien.preg_replace modifier img et lier les chemins pour utiliser le proxy

$search = array('|(<a\s*[^>]*href=[\'"]?)|', '|(<img\s*[^>]*src=[\'"]?)|'); 
$replace = array('\1proxy2.php?url=', '\1'.$url.'/'); 
$new_content = preg_replace($search, $replace, $content); 

Maintenant, mon problème est qu'il ya des liens sur les pages que je Fetch le contenu qui ressemble à ceci:

<a href="/test/page/"> 

et

<a href="http://google.se/test/"> 

Et quand après avoir remplacé ces deux les liens ressemblent à ceci:

<a href="proxy2.php?url=/test/page/"> 

et

<a href="proxy2.php?url=http://google.se/test/"> 

Le problème est pour moi est que je veux inclure une variable appelée $ url avant/test/page/et uniquement sur que les liens qui sont comme ça, pas ceux qui était déjà http: // ou https: // avant.

+0

+1 Je n'ai jamais vu le message d'accueil "Yo!" sur SO avant et parce que vous êtes nouveau :) –

+0

Copies possibles: http://stackoverflow.com/questions/1251859/php-replace-question et http://stackoverflow.com/questions/1254890/pregreplacecallback-do-twice – Gumbo

Répondre

0

Cela ferait l'affaire

$search = array('@(<a\s*[^>]*href=[\'"]?)(https?://)[email protected]'); 
$replace = array('\1proxy2.php?url='); 
$new_content = preg_replace($search, $replace, $content); 

Résultat:

< a href = "proxy2.php url =/test/page /">
< a href = "Proxy2 .php? url = google.se/test/">

+0

Cela ne semble pas fonctionner malheureusement. Peut-être avez-vous mal compris ce que j'ai écrit? Si http: // est détecté, je veux qu'il en soit ainsi, mais s'il n'est pas détecté -> alors ajoutez le variabel $ url devant. Cela a-t-il rendu les choses plus claires? : p –

+0

Eh bien, si je l'exécute sur les données ci-dessus, cela fonctionne parfaitement: ; Bien sûr, si vous l'essayez sur des données encodées en UTF-8, ajoutez un drapeau après le dernier @. – bisko

+0

google.se/test/ devrait lire http: // google.se/test/. – bisko

0

Simplifiez votre proxy2.php. Si une URL complète est entrée (http://...), Redirigez-vous vers celle-ci. Si une URL locale entre (par exemple/test/page /), déposez ce qui manque (par exemple, http://www.mylittleapp.com/test/page/) et redirigez-la.

+0

Mais ce n'est pas vraiment comment je le veux. Je veux que chaque URL passe par ce script. –

+0

Si votre script proxy2.php reçoit url =/test/page /, ne peut-il pas déterminer l'URL complète? –

+0

Je détermine l'URL avec une variable nommée $ url. Mais c'est seulement le http://test.com et pas avec les cartes et etc. –

2

Cela devrait faire le travail pour les balises d'ancrage, au moins:

<?php 
function prepend_proxy($matches) { 
    $url = 'http://example.prefix'; 

    $prepend = $matches[2] ? $matches[2] : $url; 
    $prepend = 'proxy2.php?url='. $prepend; 

    return $matches[1] . $prepend . $matches[3]; 
} 
$new_content = preg_replace_callback(
    '|(href=[\'"]?)(https?://)?([^\'"\s]+[\'"]?)|i', 
    'prepend_proxy', 
    $content 
); 
?> 
0

il me Sara. Scronide, votre code n'a pas fonctionné. Il revient encore:

<a href="proxy2.php?url=/test/page/"> 
<a href="proxy2.php?url=google.se/test/"> 

Au lieu de ce que je voulais montrer, je voulais montrer comme ça, avec l'url préfixé:

<a href="proxy2.php?url=**THEURLHERE.COM**/test/page/"> 
<a href="proxy2.php?url=google.se/test/"> 

DÉSOLÉ, IL N'A TRAVAIL, je faisais quelque chose FAUX AVEC L'URL VARIABEL. MERCI U SCRONIDE!

Questions connexes