2009-06-29 7 views
1

Vous souhaitez créer une chaîne commençant par http: // ou www cliquable.Créer une chaîne commençant par http: // Cliquable

str_replace("http://", "$string", "<a href='$string'>"); 
str_replace("www", "$string", "<a href='$string'>"); 

ne devrait pas être quelque chose comme ça?

+1

Ne pas oublier votre texte du lien et la fermeture – balpha

+3

Vous pouvez également être intéressé par l'article de blog de Jeff sur la recherche de la fin des URL: http://www.codinghorror.com/blog/archives/001181.html – balpha

Répondre

0

Je vois qu'il n'y a pas de texte à l'intérieur de l'étiquette d'ancrage, ce qui le rend invisible.

3

Vous cherchez quelque chose comme ça?

<?php 
$content = 'this is a test http://www.test.net www.nice.com hi!'; 

$regex[0] = '|(http://[^\s]+)|i';  
$replace[0] = '<a href="${1}">${1}</a>'; 

$regex[1] = '| (www[^\s]+)|i'; 
$replace[1] = ' <a href="http://${1}">${1}</a>'; 

echo preg_replace($regex, $replace, $content); 
?> 

Mise à jour Merci à macbirdie d'avoir signalé le problème! J'ai essayé de le réparer. Cependant, cela ne fonctionne que tant qu'il y a un espace avant le www. Peut-être que quelqu'un va trouver quelque chose de plus intelligent et élégant.

+1

Probablement besoin d'un peu de peaufinage que www.test.com, va faire une mauvaise url. – macbirdie

0

Ce que vous cherchez est une expression régulière. Quelque chose comme ça ...

$link = preg_replace('/(http:\/\/[^ ]+)/', '<a href="$1">$1</a>', $text); 
0

le str_replace a un ordre différent d'arguments (votre version remplacerait toutes les occurences de http:// en <a href='$string'> avec $string).

si vous voulez faire les liens html à l'intérieur d'un autre texte, alors vous avez besoin d'expressions régulières pour cela au lieu d'un remplacement régulier:

preg_replace('/(http:\/\/\S+/)', '<a href="\1">\1</a>', $subject_text); 
1
function clicky($text) { 
    $text = eregi_replace('(((f|ht){1}tp://)[[email protected]:%_+.~#?&//=]+)', '<a href="$1">$1</a>', $text); 
    $text = eregi_replace('([[:space:]()[{}])(www.[[email protected]:%_+.~#?&//=]+)', '$1<a href="http://$2">$2</a>', $text); 
    $text = eregi_replace('([_.0-9a-z-][email protected]([0-9a-z][0-9a-z-]+.)+[a-z]{2,3})', '<a href="mailto:$1">$1</a>', $text); 
    return $text; 
} 
0

solution de Merkuro avec quelques modifications.

<?php 
$content = 'this is a test http://www.test.net www.nice.com hi!'; 

$regex[0] = '`(|\s)(http://[^\s\'\"<]+)`i';  
$replace[0] = '<a href="${2}">${2}</a>'; 

$regex[1] = '`(|\s)(www\.[^\s\'\"<]+)`i'; 
$replace[1] = ' <a href="http://${2}">${2}</a>'; 

echo preg_replace($regex, $replace, $content); 
?> 

Le motif:

(|\s) 

correspond au début d'une chaîne, ou dans l'espace. Vous pouvez également utiliser le mot frontière.

\b 

J'ai ajouté un autre couple caractère qui met fin à des URL, », », <

2

Quelque chose que j'utiliser:..

function linkify_text($text) { 
    $url_re = '@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@'; 
    $url_replacement = "<a href='$1' target='_blank'>$1</a>"; 

    return preg_replace($url_re, $url_replacement, $text); 
} 

Hope this helps

Questions connexes