Voglio fare in modo che nella mia applicazione di chat, i link ai siti web possano essere cliccabili e link a YouTube e le immagini vengano automaticamente incorporate.
Ho realizzato questo codice in Java per il mio client WebIRC ma ora sto provando a farlo in PHP e JavaScript.
Non ho ancora familiarità con PHP quindi non so molto sull'uso di regex lì. Mi chiedo se un'anima gentile possa aiutarmi con questo …
Per la cosa di YouTube ho provato questo senza successo:
if (preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\n]+#", $message, $m)) { $video_id = $m[1]; $message = preg_replace("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\n]+#","<iframe class='embedded-video' src='http://www.youtube.com/embed/" . $video_id . "' allowfullscreen></iframe>",$message); }
Ecco una soluzione che ho trovato:
$str = 'This is an image: google.ca/images/srpr/logo3w.png YouTube: http://www.youtube.com/watch?v=V2b8ilapFrI&feature=related Stackoverflow: http://stackoverflow.com/'; $str = preg_replace_callback('#(?:https?://\S+)|(?:www.\S+)|(?:\S+\.\S+)#', function($arr) { if(strpos($arr[0], 'http://') !== 0) { $arr[0] = 'http://' . $arr[0]; } $url = parse_url($arr[0]); // images if(preg_match('#\.(png|jpg|gif)$#', $url['path'])) { return '<img src="'. $arr[0] . '" />'; } // youtube if(in_arrays($url['host'], arrays('www.youtube.com', 'youtube.com')) && $url['path'] == '/watch' && isset($url['query'])) { parse_str($url['query'], $query); return sprintf('<iframe class="embedded-video" src="http://www.youtube.com/embed/%s" allowfullscreen></iframe>', $query['v']); } //links return sprintf('<a href="%1$s">%1$s</a>', $arr[0]); }, $str);
Fammi sapere se hai bisogno di me per chiarire qualsiasi cosa per te.
Ho avuto alcuni problemi con il preg_replace_callback
quando il text includeva tre punti ...
Il codice sopra ha riconosciuto i tre punti come un URL che non è vero.
Ecco la mia correzione e sembra funzionare al momento $str = preg_replace_callback('#(?:https?://\S+)|(?:www.\S+)|(?:jpe?g|png|gif)#', function($arr)
Questa correzione fallirebbe in altri casi ???
Il codice di Tim Cooper non funziona con il link https. Es: https://www.facebook.com/ Restituirà http: // https: //www.facebook.com/
Sostituire
if(strpos($arr[0], 'http://') !== 0)
di
if(strpos($arr[0], 'http') !== 0)