2011-04-19 2 views
0

ce qui est le l.phpun bon moyen d'implémenter l.php comme facebook?

im deviner l.php est link.php sur facebook . c'est un pré-rediriger le script . chaque lien sur facebook est filtré link.php? to = lien

j'ai des choses à l'esprit. comme

  1. faire une classe rendent ou filtrer l'entrée avec regex, trouve un www.link.com changer alors à quelque chose comme <a href="http://www.oursite.php?to=www.link.com">link</a>, le problème est quand nous avons des changements, si nous changeons quelque chose, tous nos liens d'archives ne vont pas fonctionner (supposons que nous mettons l'entrée dans la base de données.).

  2. utiliser un JavaScript pour ce faire, je veux dire oui, mais je ne suis pas familier avec js, mais je sais que nous pouvons rechercher et changer les liens en direct comme ci-dessus. mais le problème est lorsque l'utilisateur ne dispose pas d'un js sur, (mobile, ou aucun plugin JavaScript, etc.)

ou peut-être que vous avez une meilleure réponse quelle est la meilleure façon dont nous implantons l.php ?

Répondre

2

Ce serait l'un des avantages de l'utilisation d'une fonction pour générer des liens dans vos vues:

<a href="<?= build_link('www.link.com'); ?>">link text</a> 

Votre build_link() serait comme si:

function build_link($path) 
{ 
    $prefix = ''; 
    if (preg_match('|^(https?://|www\.)', $path)) 
    { 
    $prefix = 'http://www.oursite.php?to='; 
    } 
    return $prefix . $path; 
} 

Cela signifie que vous pouvez même utiliser un CDN facilement parmi vos liens.

L'option la plus simple est d'utiliser Javascript, mais comme vous le dites, l'utilisateur doit avoir un navigateur compatible Javascript, ce qui est très populaire grâce à la technologie du navigateur, même sur la plateforme mobile. Le jQuery ressemblerait donc:

$(document).ready(function() { 

    $('a').live('click', function() { 
    var href = $(this).attr('href'); 

    if (href.match(/^(https?:\/\/|www\\.)/i)) 
    { 
     this.href = 'http://www.oursite.php?to=' + href; 
    } 

     return this.href; 
    }); 
}); 

Si la modification de vos liens n'est pas viable, à savoir que vous avez besoin de réécrire les liens qui se trouve dans une base de données ou similaire, je regarderais en utilisant DOMDocument - il est généralement une bonne pratique pour éviter regexes désordre lorsqu'ils traitent avec des structures complexes telles que HTML

$doc = new DOMDocument('1.0', 'UTF-8'); 
$doc->loadHTML($text); 
$anchors = $doc->getElementsByTagName('a'); 

foreach($anchors as $a) { 
    $href = $a->getAttribute('href'); 
    if (preg_match('|^(https?://|www\.)', $href)) 
    { 
     $a->setAttribute('href', 'http://www.oursite.php?to=' . $href); 
    } 
} 

$newHTML = $doc->saveHTML(); 

donc, il y a trois options:

  1. Passez par chaque partie de votre site qui génère des liens vers des sites externes, et les re-écrire par une fonction build_link

  2. Réécriture en utilisant l'aide de DOMDocument

  3. Utilisez Javascript
+0

merci !!!!, vraiment excellente réponse que cependant, Suggérez-vous? des inconvénients de DOMcocument? comme l'utilisation du bélier? il vaudra mieux s'il y a des avantages et des inconvénients des options. –

+1

Je n'ai fait aucun test pour voir les performances de DOMDocument, vous pourriez vouloir tester vous-même pour voir si c'est trop lourd ou pas. C'est probablement un peu lourd pour quelque chose d'aussi simple, donc si vous voulez descendre la route regex, vous pouvez juste faire 'preg_replace ('| ] +) | i', 'http: //www.oursite.php? to = $ 1', $ html);' –

0

Je suis allé à l'aide de PHP pour laisser le contenu de la page passe par un filtre qui utilise regex pour remplacer les liens.

Utiliser javascript signifierait que paople peut l'éteindre. PHP assure que tous les liens sont remplacés correctement. N'oubliez pas de vous assurer que les liens internes (comme la navigation) ne sont pas touchés.

Il existe plusieurs types de regex qui trouve urls et vous devez choisir celui qui convient à vos besoins

Edit: J'utiliser cette regex (https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)

Questions connexes