2016-05-14 2 views
2

Я пишу простой блог для своего сайта, и мне это удалось.Автоматическое обнаружение и вставка MP4/MP3 Ссылки в html-контенте с использованием PHP

function convertYoutube($string, $id='') { 
     return preg_replace(
      "/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i", 
      "<div class=videoWrapper><iframe style=\"clear:both;\" width=\"420\" height=\"315\" src=\"//www.youtube.com/embed/$2\" allowfullscreen></iframe></div> 
      ", 
      $string 
     ); 
    } 

Это преобразование URL-адреса youtube (короткого или длинного) в форму для встраивания.

Теперь то, что я хочу сделать это:

  • конвертировать MP4 ссылки, например:
    http://cdn.example.com/akndh39/2016/askbdsjdbuu/my-video.mp4?id=28gsbd0mu&d=33hfsbb

    в

    <video width="320" height="240" controls> <source src="movie.mp4" type="video/mp4"> </video>

  • конвертировать mp3 ссылки в эквивалентный формат тега

Однако, я не хочу, чтобы преобразовать ссылки, такие как этот

<a href="http://cdn.example.com/akndh39/2016/askbdsjdbuu/my-video.mp4">DOWNLOAD VIDEO</a> 

Я хочу, чтобы они оставались нетронутыми, как, что, как для mp4 и mp3 ссылки.

EDITED

То, что я хочу это:

This is a very nice Video by Artiste So-n-So https://scontent.cdninstagram.com/t50.2886-16/13229628_1095069080586346_1424116369_n.mp4 

<a href="http://cdn.example.com/akndh39/2016/askbdsjdbuu/my-video.mp4?id=28gsbd0mu&d=33hfsbb"> 
Download Video</a> 

enter image description here

This is a very nice Video by Artiste So-n-So  <video width="320" height="240" controls> 
 
<source src="https://scontent.cdninstagram.com/t50.2886-16/13229628_1095069080586346_1424116369_n.mp4" type="video/mp4"> 
 
</video> 
 

 
<a href="http://cdn.example.com/akndh39/2016/askbdsjdbuu/my-video.mp4?id=28gsbd0mu&d=33hfsbb"> 
 
Download Video</a>

+0

Просьба указать четкий образец ** входа ** и желаемого ** вывода **. –

+0

Я отредактировал вопрос – Normal9ja

+0

как бы вы перешли от * * to * Download Video *? – sweaver2112

ответ

3

Это регулярное выражение будет найти MP4-адрес:

(["\']?https?:\/\/[^\/]+(?:\/[^\/]+)*?.mp4\?(&?\w+(=[^&\'"\s]*)?)*) 

После того, что есть некоторые PHP-код, чтобы заменить URL с видео и источником тэгами. Обратите внимание, что теперь это захватывает ведущие символы кавычек, чтобы определить, содержится ли URL-адрес в ссылке href="" или src=""; приведенный ниже код явно проверяет это и пропускает найденные URL-адреса, начинающиеся с символов кавычек. Во втором примере см. Второй URL, чтобы посмотреть, как это работает.

Ниже приведен пример кода с использованием URL для разбора автономных MP4 URL-адреса из текста:

$subject = <<<LABEL 
    This is a very nice Video by Artiste So-n-So https://s...content-available-to-author-only...m.com/t50.2886-16/13229628_1095069080586346_1424116369_n.mp4 


     <a href="http://c...content-available-to-author-only...e.com/akndh39/2016/askbdsjdbuu/my-video.mp4?id=28gsbd0mu&d=33hfsbb"> 
     Download Video</a>" 
LABEL; 

$subject = <<<LABEL 
Please one more thing, can you expand your regex to include URLs like these. 
https://z-1-scontent-lhr3-1.xx.fbcdn.net/v/t42.1790-4/13226507_264732453878764_‌​308543824_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InN2ZV9zZCJ9&oh=c68eadae7d9a5b25ad290ea72‌​3f8fc40&oe=57378FA2 
that is URLs that doesn't end immediately with the extension, but have other parameters added to it. 
LABEL; 

$pattern = '(["\']?https?:\/\/[^\/]+(?:\/[^\/]+)*?.mp4\?(&?\w+(=[^&\'"\s]*)?)*)'; 
$matches = Array(); 
$match = preg_match($pattern, $subject, $matches); 

if (count($matches) !== 0) { 
    $first_char = substr($matches[0], 0, 1); 
    if ($first_cahr !== '"' && $first_char !== "'") { 
     $replace = '<video width="320" height="240" controls><source src="' . $matches[0] . '" type="video/mp4"></video>'; 

     $result = str_replace($matches[0], $replace, $subject); 

     print_r($result); 
    } 
} 

Выход для первого тестового примера является:

Success time: 0.03 memory: 52480 signal:0 
    This is a very nice Video by Artiste So-n-So <video width="320" height="240" controls><source src="https://scontent.cdninstagram.com/t50.2886-16/13229628_1095069080586346_1424116369_n.mp4" type="video/mp4"></video> 


     <a href="http://cdn.example.com/akndh39/2016/askbdsjdbuu/my-video.mp4?id=28gsbd0mu&d=33hfsbb"> 
     Download Video</a>" 

Выходной сигнал для второго тестового примера это:

Please one more thing, can you expand your regex to include URLs like these. 
<video width="320" height="240" controls><source src="https://z-1-scontent-lhr3-1.xx.fbcdn.net/v/t42.1790-4/13226507_264732453878764_‌​308543824_n.mp4?efg=eyJ2ZW5jb2RlX3RhZyI6InN2ZV9zZCJ9&oh=c68eadae7d9a5b25ad290ea72‌​3f8fc40&oe=57378FA2" type="video/mp4"></video> 
that is URLs that doesn't end immediately with the extension, but have other parameters added to it. 
+0

Хорошо, я попробую и прокомментирую. – Normal9ja

+0

Извините, но это действительно не сработало. – Normal9ja

+0

Что это значит? Он работал над образцом ввода, поэтому, если он не работает с другим вводом, который отличается от других, можете ли вы сообщить мне, что это такое, чтобы я мог его исправить? Я единственный, кто даже пытался дать вам ответ до сих пор, поэтому, пожалуйста, помогите мне помочь вам. –

Смежные вопросы