PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (5): « 1 2 3 4 [5]   

> Без описания
Строитель
Отправлено: 09 Апреля, 2017 - 23:43:31
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 925
Дата рег-ции: Февр. 2014  


Помог: 31 раз(а)




bellagio, вроде бы так:
Спойлер (Отобразить)
 
 Top
bellagio
Отправлено: 10 Апреля, 2017 - 07:44:25
Post Id


Новичок


Покинул форум
Сообщений всего: 37
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




дополнил:
CODE (htmlphp):
скопировать код в буфер обмена
  1.     $input = '
  2.     Тут вступление повествующее о необходимости увидеть этот летний пейзаж именно в этом году.
  3.     foto/1.jpg=картинка про лето+летний пейзаж
  4.     foto/2.jpg=картинка про лето
  5.     Тут летний пейзаж заканчивается и хочется пожелать...
  6.      
  7.     <p>foto/3.jpg</p>
  8.      
  9.     foto/4.jpg=картинка про лето+летний пейзаж
  10.     Ну и напоследок советую посмотреть видео ролик:
  11.     <p>https://www.youtube.com/watch?v=rC9OnOWJnY4</p>
  12.     ';
  13.      
  14.     echo parseTagsRecursive($input);
  15.      
  16.     function parseTagsRecursive($input) {
  17.         return preg_replace_callback(
  18.             [
  19.                 '~.*foto/(.+).*~iu',
  20.                 '~https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?~i'
  21.            ],
  22.            function ($m) {
  23.               if ( preg_match('~foto/(.+)=(.+)\+(.+)~iu', $m[0]) ) {
  24.                   $pattern = '~.*foto/(.+)=(.+)\+(.+)</p>~iu';
  25.                     $replace = '<div class="wp-caption aligncenter">'.
  26.                         '<img src="foto/$1" alt="$3" />'.
  27.                         '<div class="wp-caption-text">$2</div></div>';
  28.                 } elseif ( preg_match('~foto/(.+)=(.+)~iu', $m[0]) ) {
  29.                     $pattern = '~.*foto/(.+)=(.+)</p>~iu';
  30.                     $replace = '<div class="wp-caption aligncenter">'.
  31.                         '<img src="foto/$1" alt="$2" />'.
  32.                         '<div class="wp-caption-text">$2</div></div>';
  33.                 } elseif ( preg_match('~foto/(.+)~iu', $m[0]) ) {
  34.                     $pattern = '~.*foto/(.+)</p>~iu';
  35.                     $replace = '<div class="wp-caption_one aligncenter">'.
  36.                         '<img src="foto/$1" alt="" /></div>';
  37.                 } elseif ( preg_match('~https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?~i', $m[0]) ) {
  38.                   $pattern = '~https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?~i';
  39.                     $replace = '<iframe style="display: block; margin-left: auto; margin-right: auto;" src="https://www.youtube.com/embed/$2" frameborder="0" width="500" height="375"></iframe>';
  40.                 }
  41.      
  42.                 return preg_replace($pattern, $replace, $m[0]);
  43.             },
  44.             $input
  45.         );
  46.     }

Все вырезает, кроме тега <p> перед видео. Таким же способом, что и для картинок не вариант.

Кроме того, дополнив код - var_dump($m); и посмотрев исходный код страницы получаем:
PHP:
скопировать код в буфер обмена
  1. array(2) {
  2.   [0]=>
  3.   string(78) "<p>foto/1.jpg=картинка про лето+летний пейзаж</p>
  4. "
  5.   [1]=>
  6.   string(69) "1.jpg=картинка про лето+летний пейзаж</p>
  7. "
  8. }
  9. array(2) {
  10.   [0]=>
  11.   string(52) "<p>foto/2.jpg=картинка про лето</p>
  12. "
  13.   [1]=>
  14.   string(43) "2.jpg=картинка про лето</p>
  15. "
  16. }
  17. array(2) {
  18.   [0]=>
  19.   string(19) "<p>foto/3.jpg</p>
  20. "
  21.   [1]=>
  22.   string(10) "3.jpg</p>
  23. "
  24. }
  25. array(2) {
  26.   [0]=>
  27.   string(78) "<p>foto/4.jpg=картинка про лето+летний пейзаж</p>
  28. "
  29.   [1]=>
  30.   string(69) "4.jpg=картинка про лето+летний пейзаж</p>
  31. "
  32. }
  33. array(3) {
  34.   [0]=>
  35.   string(47) "https://www.youtube.com/watch?v=rC9OnOWJnY4</p>"
  36.   [1]=>
  37.   string(4) "www."
  38.   [2]=>
  39.   string(15) "rC9OnOWJnY4</p>"
  40. }

получается, что конечный тег </p> еще цепляется. А хотя визуально картинки выводятся нормально. или я чего-то недопонимаю?
 
 Top
Строитель
Отправлено: 10 Апреля, 2017 - 08:52:17
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 925
Дата рег-ции: Февр. 2014  


Помог: 31 раз(а)




bellagio пишет:
дополнил
Вы добавили теги параграфа к остальным картинкам? Или что вы имеете ввиду под дополнением? Код смотреть сейчас не удобно, я зашёл с телефона.
 
 Top
bellagio
Отправлено: 10 Апреля, 2017 - 09:00:26
Post Id


Новичок


Покинул форум
Сообщений всего: 37
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Строитель пишет:
Вы добавили теги параграфа к остальным картинкам?

Я имею ввиду, что первый тег <p> убирается, а конечный </p> нет. Так и у картинок и у видео. Это при текущей реализации кода
 
 Top
Строитель
Отправлено: 10 Апреля, 2017 - 09:03:44
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 925
Дата рег-ции: Февр. 2014  


Помог: 31 раз(а)




bellagio пишет:
Строитель пишет:
Вы добавили теги параграфа к остальным картинкам?

Я имею ввиду, что первый тег <p> убирается, а конечный </p> нет. Так и у картинок и у видео. Это при текущей реализации кода
А вы мой вариант изменяли? Я вчера код тестировал на локалке, всё было ок.
 
 Top
bellagio
Отправлено: 10 Апреля, 2017 - 09:26:25
Post Id


Новичок


Покинул форум
Сообщений всего: 37
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Да, я немного два первых варианта поправил.

А вчера когда тестировали, смотрели в исходном тексте страницы, лишних тегов не было?
 
 Top
Строитель
Отправлено: 10 Апреля, 2017 - 09:55:04
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 925
Дата рег-ции: Февр. 2014  


Помог: 31 раз(а)




bellagio пишет:
Да, я немного два первых варианта поправил.

А вчера когда тестировали, смотрели в исходном тексте страницы, лишних тегов не было?
Лишних не было. Но надо принимать во внимание строку, которую вы подаете на вход. Лишних тегов не было именно для той строки, которая написана в моём примере.
 
 Top
bellagio
Отправлено: 10 Апреля, 2017 - 20:00:50
Post Id


Новичок


Покинул форум
Сообщений всего: 37
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Проблема актуальна с конечным </p> в особенности для видео. Пример кода выше.
 
 Top
Строитель
Отправлено: 10 Апреля, 2017 - 23:24:49
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 925
Дата рег-ции: Февр. 2014  


Помог: 31 раз(а)




bellagio пишет:
Проблема актуальна с конечным </p> в особенности для видео. Пример кода выше.
А чем вас не устраивает этот вариант? Я вам уже несколько раз в этой теме говорил, чтобы вы привели пример текста, который будете подавать на вход вашей функции.

Вот поэтому в итоге и получается, что код работает для конкретного текста. Далее, вы меняете текст на другой вариант, и снова у вас проблема -- замкнутый круг получается )
 
 Top
bellagio
Отправлено: 11 Апреля, 2017 - 10:40:58
Post Id


Новичок


Покинул форум
Сообщений всего: 37
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Текст стандартный, единственное, это вставки ссылок на видео и на картинки по шаблону для которого делаем код. Ну а сам редактор tinymce расставляет абзац к тексту и ссылкам. Пример текста:
Спойлер (Отобразить)


Строитель пишет:
А чем вас не устраивает этот вариант?

в коде страницы появляется лишние теги абзаца </p> то есть картинка может выглядеть так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <iframe style="display: block; margin-left: auto; margin-right: auto;" src="https://www.youtube.com/embed/rC9OnOWJnY4</p>" width="500" frameborder="0" height="375"></iframe>

или появиться в:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <img src="foto/1.jpg" alt="летний пейзаж</p>">

А также, если открыть код страницы у видео остается неудаленный тег <p> перед видео:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <p><iframe style="display: block; margin-left: auto; margin-right: auto;" src="https://www.youtube.com/embed/rC9OnOWJnY4" frameborder="0" width="500" height="375"></iframe>
 
 Top
Строитель
Отправлено: 11 Апреля, 2017 - 10:58:24
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 925
Дата рег-ции: Февр. 2014  


Помог: 31 раз(а)




bellagio пишет:
Пример текста:
Вот теперь другое дело ) Сегодня вечером для этого текста наберу шаблон.
 
 Top
Строитель
Отправлено: 11 Апреля, 2017 - 20:43:24
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 925
Дата рег-ции: Февр. 2014  


Помог: 31 раз(а)




bellagio, вам нужно получить такой исходный код?
Спойлер (Отобразить)
 
 Top
bellagio
Отправлено: 11 Апреля, 2017 - 20:55:39
Post Id


Новичок


Покинул форум
Сообщений всего: 37
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Строитель пишет:
вам нужно получить такой исходный код?

Да
 
 Top
Строитель
Отправлено: 11 Апреля, 2017 - 20:58:26
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 925
Дата рег-ции: Февр. 2014  


Помог: 31 раз(а)




bellagio пишет:
Строитель пишет:
вам нужно получить такой исходный код?

Да
Тогда вот код
Спойлер (Отобразить)
 
 Top
Страниц (5): « 1 2 3 4 [5]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB