PHP preg_replace: sustitución de enlaces de Youtube sobre sustitución de URL
Frecuentes
Visto 3,527 veces
0
en mi sitio web tengo tres expresiones regulares (una está deshabilitada y entenderás por qué...) para sustituir lo que publican los usuarios:
1° Reemplace el correo electrónico con los vinculados:
$string = preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?))/i","<a href=\"mailto:$1\">$1</a>",$string);
2° Reemplace el enlace de Youtube con video incrustado:
$pattern = '/http:\/\/www\.youtube\.com\/watch\?(.*?)v=([a-zA-Z0-9_\-]+)(\S*)/i';
$replace = '<iframe title="YouTube" class="youtube" type="text/html" width="320" height="240" src="http://www.youtube.com/embed/$2" frameborder="0" allowFullScreen></iframe>';
$string = preg_replace($pattern, $replace, $string);
3° Reemplazar enlaces con enlaces (¡estos están deshabilitados!):
/*** make sure there is an http:// on all URLs ***/
$string = preg_replace("/([^\w\/])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i", "$1http://$2",$string);
/*** make all URLs links ***/
$string = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<a target=\"_blank\" href=\"$1\">$1</a>",$string);
Mi problema es que, obviamente, el tercero sustituye los enlaces de youtube después de que son reemplazados por expresiones regulares anteriores (cambiar de secuencia, romper videos de youtube)
¿Cómo habilitar la tercera expresión regular para sustituir las URL ignorando el patrón de YouTube? Gracias ;-)
1 Respuestas
2
Prueba esto:
// youtube
$string = preg_replace("/\s*[a-zA-Z\/\/:\.]*youtube.com\/watch\?v=([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i"," <object width=\"100%\" height=\"344\"><param name=\"movie\" value=\"http://www.youtube.com/v/$1&hl=en&fs=1\"></param><param name=\"allowFullScreen\" value=\"true\"></param><embed src=\"http://www.youtube.com/v/$1&hl=en&fs=1\" type=\"application/x-shockwave-flash\" allowfullscreen=\"true\" width=\"100%\" height=\"450\"></embed></object> ",$string);
// email
$string = preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?))/i","<a href=\"mailto:$1\">$1</a>", $string);
// links
$string = preg_replace("#(^|[\n\s>])([\w]+?://[^\s\"\n\r\t<]*)#is", "\\1<a href=\"\\2\">\\2</a>", $string);
contestado el 03 de mayo de 12 a las 19:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php regex preg-replace or haz tu propia pregunta.
¡¡Perfecto!! El único problema es que no sustituye las direcciones URL que comienzan sin http:// - Giuseppe Donato