2009-12-04 8 views
0

J'utilise ce codeComment faire un workeable <a href .. en PHP

$patterns = "!((http:/{2}[\w\.]{2,}[/\w\-\.\?\&\=\#]*)|(www\.[/\w\-\.\?\&\=\#]*)|([a-zA-Z0-9-\.]+(com|us|co.il)[^\s]*))!e"; 
return preg_replace($patterns, "'<a class=\"highlight boughtAt\" href=\"\\1\" title=\"\\1\" target=\"_blank\">'.(strlen('\\1')>=$chr_limit ? substr('\\1',0,$chr_limit).'$add':'\\1').'</a>'", $url); 

Mais mon problème est que si je reçois le www. ou tout simplement .com je reçois dans le href = le préfixe le domaine dans lequel je suis. Comment puis-je l'éviter? Juste obtenir un lien de travail?

Merci à l'avance, Roy

+2

S'il vous plaît décrire ce que vous êtes essayant réellement de faire. – Joe

+1

Veuillez fournir une liste de 3 entrées possibles et les valeurs que vous comptez extraire. par exemple. 'http://www.something.com/ => www.something.com' –

+1

'/{2} '- Pourquoi si compliqué? Pourquoi ne pas simplement '//'? – Gumbo

Répondre

0

Vous devriez être en mesure d'utiliser une affirmation de lookbehind - (?<=...) puis toujours ajouter dans le http: // dans votre lien:

$patterns = "!(((?<=http:/{2})[\w\.]{2,}[/\w\-\.\?\&\=\#]*)|(www\.[/\w\-\.\?\&\=\#]*)|([a-zA-Z0-9-\.]+(com|us|co.il)[^\s]*))!e"; 
return preg_replace($patterns, "'<a class=\"highlight boughtAt\" href=\"http://\\1\" title=\"\\1\" target=\"_blank\">'.(strlen('\\1')>=$chr_limit ? substr('\\1',0,$chr_limit).'$add':'\\1').'</a>'", $url); 
Questions connexes