Cómo obtener todo el iframe de YouTube desde HTML usando expresiones regulares

3 minutos de lectura

Avatar de usuario de Muhammad Hassaan
Muhammad Hassan

quiero tener todo youtube iframe usando expresiones regulares y desea agregar una etiqueta específica a cada registro encontrado.

Por ejemplo <youtube-frame></youtube-frame> a iframe principio y fin.

Salida necesaria:

<youtube-frame><iframe width="560" height="315" src="https://www.youtube.com/embed/vakfMRyjulw" frameborder="0" allowfullscreen></iframe></youtube-frame>

<youtube-frame><iframe width="560" height="315" src="https://www.youtube.com/embed/aDGWMlKPKDs" frameborder="0" allowfullscreen></iframe></youtube-frame>

Mi código

$embed = '
<iframe width="560" height="315" src="https://www.youtube.com/embed/vakfMRyjulw" frameborder="0" allowfullscreen></iframe>

<iframe width="600" height="350" src="https://tune.pk/player/embed_player.php?vid=6508414&folderp2016/05/04/&width=600&height=350&autoplay=no" frameborder="0" allowfullscreen scrolling="no"></iframe>

<iframe width="560" height="315" src="https://www.youtube.com/embed/aDGWMlKPKDs" frameborder="0" allowfullscreen></iframe>

<iframe width="600" height="350" src="https://tune.pk/player/embed_player.php?vid=6508414&folder=2016/05/04/&width=600&height=350&autoplay=no" frameborder="0" allowfullscreen scrolling="no"></iframe>

<iframe width="600" height="350" src="https://tune.pk/player/embed_player.php?vid=6508414&folder=2016/05/04/&width=600&height=350&autoplay=no" frameborder="0" allowfullscreen scrolling="no"></iframe>
';

¿Qué he probado?

$pattern = '/<iframe\.*src=\"//youtube"\.*/';
$iframeSrc = preg_match($pattern, $embed, $matches);
var_dump($iframeSrc);

  • Error_reporting no es una opción para usted? ¿Por qué crees src=\"//youtube" coincidiría src="https://www.youtube.… ?

    – mario

    4 mayo 2016 a las 13:12

  • Ya respondí, pero aún así: ¿Qué faltaría en su pregunta a continuación “¿Qué he probado?” es el resultado del código que probó (como la salida de var_dump).

    – CherryDT

    4 mayo 2016 a las 13:19


Avatar de usuario de CherryDT
cerezaDT

Prueba esto:

$iframeSrc = preg_replace('/<iframe[^>]*src\s*=\s*"?https?:\/\/[^\s"\/]*youtube.com(?:\/[^\s"]*)?"?[^>]*>.*?<\/iframe>/i', '<youtube-frame>$0</youtube-frame>', $embed);

Esto usa preg_replace y una expresión regular global para reemplazar todas las etiquetas IFrame de YouTube (incluidas sus etiquetas de cierre) con <youtube-frame>$0</youtube-frame> dónde $0 es la cadena original.

En teoría, la expresión regular podría simplificarse si está totalmente seguro del formato de su entrada, pero la diseñé para que fuera lo suficientemente sólida como para hacer frente a otras sintaxis como src=http://example.com o src = "http://example.com" etc. que son aceptados por los navegadores hoy en día, y solo coincide con las fuentes en *.youtube.com dominios y no algo como myyoutubesite.com.

  • Gracias @CherryDT ¿Podría explicar qué gihacer aquí <\/iframe>/gi

    – Muhammad Hassaan

    4 mayo 2016 a las 13:42


  • g lo hace global para que coincida varias veces (de lo contrario, coincidiría solo una vez más cualquier subcoincidencia), i hace que no distinga entre mayúsculas y minúsculas porque <IFRAME> también es una forma válida de definir un IFrame, como sería <iFrAmE>.

    – CherryDT

    4 mayo 2016 a las 13:44

¿Ha sido útil esta solución?