texto htmlentities html_entity_decode html_entities especiales convertir caracteres php url string

htmlentities - php url decode



¿Cómo puedo vincular URL en una cadena con php? (9)

Tengo la siguiente cadena:

"Look on http://www.google.com".

Necesito convertirlo a:

"Buscar en http://www.google.com "

La cadena original puede tener más de 1 cadena de URL.

¿Cómo hago esto en php?

Gracias



Eche un vistazo a las expresiones regulares . Entonces harías algo like :

$text = preg_replace(''@(https?://([-/w/.]+)+(:/d+)?(/([/w/_/.]*(/?/S+)?)?)?)@'', ''<a href="$1">$1</a>'', $text);


Encontré este código en http://code.seebz.net/p/autolink-php/ y lo modifiqué un poco para reconocer www. * Como enlaces. No estoy muy familiarizado con las expresiones regulares, pero creo que las dos líneas str_replace se pueden modificar a una expresión regular

<?php $text = ''First link is: www.example.com. Second link is http://example.com. Third link is https://example.com. Fourth link is http://www.example.com. Fifth link is <a href="http://www.example.com">www.example.com</a>''; function autolink($str, $attributes=array()) { $str = str_replace("http://www","www",$str); $str = str_replace("https://www","www",$str); $attrs = ''''; foreach ($attributes as $attribute => $value) { $attrs .= " {$attribute}=/"{$value}/""; } $str = '' '' . $str; $str = preg_replace( ''`([^"=/'>])((http|https|ftp)://[^/s<]+[^/s</.)])`i'', ''$1<a href="$2"''.$attrs.''>$2</a>'', $str ); $str = preg_replace( ''`([^"=/'>])((www).[^/s<]+[^/s</.)])`i'', ''$1<a href="http://$2"''.$attrs.''>$2</a>'', $str ); $str = substr($str, 1); return $str; } echo autolink($text); ?>


Encontré un ejemplo que permite enlaces que incluyen ftp, https y otros que parecen funcionar bien para múltiples URL

how-to-detect-urls-in-text-and-convert-to-html-links-php-using-regular-expressions

<?php // The Regular Expression filter $pattern = "/(http|https|ftp|ftps)/:////[a-zA-Z0-9/-/.]+/.[a-zA-Z]{2,3}(///S*)?/"; //example text $text="Example user text with a URL http://www.zero7web.com , second link http://www.didsburydesign.co.uk"; // convert URLs into Links $text= preg_replace($pattern, "<a href=/"//0/" rel=/"nofollow/">//0</a>", $text); echo $text; ?>

Probablemente una buena idea para añadir nofollow al enlace también es un valor enviado por el usuario.


Necesitarás usar expresiones regulares ...

Algo como esto ayudará.

$result = preg_replace(''//b(https?|ftp|file):////[-A-Z0-9+&@#//%?=~_|!:,.;]*[A-Z0-9+&@#//%=~_|]/i'', ''<a href="/0">/0</a>'', $text);


Prueba esto...

<? function link_it($text) { $text= preg_replace("/(^|[/n ])([/w]*?)([/w]*?:////[/w]+[^ /,/"/n/r/t<]*)/is", "$1$2<a href=/"$3/" >$3</a>", $text); $text= preg_replace("/(^|[/n ])([/w]*?)((www)/.[^ /,/"/t/n/r<]*)/is", "$1$2<a href=/"http://$3/" >$3</a>", $text); $text= preg_replace("/(^|[/n ])([/w]*?)((ftp)/.[^ /,/"/t/n/r<]*)/is", "$1$2<a href=/"ftp://$3/" >$3</a>", $text); $text= preg_replace("/(^|[/n ])([a-z0-9&/-_/.]+?)@([/w/-]+/.([/w/-/.]+)+)/i", "$1<a href=/"mailto:$2@$3/">$2@$3</a>", $text); return($text); } $text = "ini link gue: http://sapua.com <br> https://sapua.com <br> anything1://www.sss.com <br> dua www.google.com <br> tiga http://www.google.com <br> ftp.sapua.com <br> [email protected] "; print link_it($text); ?>


Puedes usar lo siguiente:

$string = "Look on http://www.google.com"; $string = preg_replace( "~[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]~", "<a href=/"//0/">//0</a>", $string);

Versiones de PHP <5.3 (ereg_replace) de lo contrario (preg_replace)


Revisa mi función linkify, que usa preg_replace_callback (PHP 5.3 solamente). Es compatible con http, correo electrónico y Twitter:

http://www.jasny.net/articles/linkify-turning-urls-into-clickable-links-in-php/

/** * Turn all URLs in clickable links. * * @param string $value * @param array $protocols http/https, ftp, mail, twitter * @param array $attributes * @param string $mode normal or all * @return string */ function linkify($value, $protocols = array(''http'', ''mail''), array $attributes = array(), $mode = ''normal'') { // Link attributes $attr = ''''; foreach ($attributes as $key => $val) { $attr = '' '' . $key . ''="'' . htmlentities($val) . ''"''; } $links = array(); // Extract existing links and tags $value = preg_replace_callback(''~(<a .*?>.*?</a>|<.*?>)~i'', function ($match) use (&$links) { return ''<'' . array_push($links, $match[1]) . ''>''; }, $value); // Extract text links for each protocol foreach ((array)$protocols as $protocol) { switch ($protocol) { case ''http'': case ''https'': $value = preg_replace_callback($mode != ''all'' ? ''~(?:(https?)://([^/s<]+)|(www/.[^/s<]+?/.[^/s<]+))(?<![/.,:])~i'' : ''~([^/s<]+/.[^/s<]+)(?<![/.,:])~i'', function ($match) use ($protocol, &$links, $attr) { if ($match[1]) $protocol = $match[1]; $link = $match[2] ?: $match[3]; return ''<'' . array_push($links, ''<a'' . $attr . '' href="'' . $protocol . ''://'' . $link . ''">'' . $link . ''</a>'') . ''>''; }, $value); break; case ''mail'': $value = preg_replace_callback(''~([^/s<]+?@[^/s<]+?/.[^/s<]+)(?<![/.,:])~'', function ($match) use (&$links, $attr) { return ''<'' . array_push($links, ''<a'' . $attr . '' href="mailto:'' . $match[1] . ''">'' . $match[1] . ''</a>'') . ''>''; }, $value); break; case ''twitter'': $value = preg_replace_callback(''~(?<!/w)[@#](/w++)~'', function ($match) use (&$links, $attr) { return ''<'' . array_push($links, ''<a'' . $attr . '' href="https://twitter.com/'' . ($match[0][0] == ''@'' ? '''' : ''search/%23'') . $match[1] . ''">'' . $match[0] . ''</a>'') . ''>''; }, $value); break; default: $value = preg_replace_callback($mode != ''all'' ? ''~'' . preg_quote($protocol, ''~'') . ''://([^/s<]+?)(?<![/.,:])~i'' : ''~([^/s<]+)(?<![/.,:])~i'', function ($match) use ($protocol, &$links, $attr) { return ''<'' . array_push($links, ''<a'' . $attr . '' href="'' . $protocol . ''://'' . $match[1] . ''">'' . $match[1] . ''</a>'') . ''>''; }, $value); break; } } // Insert all link return preg_replace_callback(''/<(/d+)>/'', function ($match) use (&$links) { return $links[$match[1] - 1]; }, $value); }