Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: По разбивке предложения [4]

 PHP.SU

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


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

> Без описания
bellagio
Отправлено: 05 Апреля, 2017 - 22:06:45
Post Id


Новичок


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


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




Строитель отображается, но есть один момент, текстовая часть страницы плывет. То есть input может быть и такой:
PHP:
скопировать код в буфер обмена
  1. $input = '
  2. Тут вступление повествующее о необходимости увидеть этот летний пейзаж именно в этом году.
  3. foto/1.png=картинка про лето+летний пейзаж
  4. foto/2.png=картинка про лето
  5. Тут летний пейзаж заканчивается и хочется пожелать...
  6. foto/3.png
  7. foto/1.png=картинка про лето+летний пейзаж
  8. Ну и напоследок советую посмотреть видео ролик:
  9. https://www.youtube.com/watch?v=rC9OnOWJnY4
  10. ';

То есть нужно учитывать что в input -e может быть не только графическая часть, но и иная
 
 Top
Строитель Модератор
Отправлено: 05 Апреля, 2017 - 22:47:49
Post Id



Участник


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


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




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


Новичок


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


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




Работает данный вариант, но как оформить еще и подхват видео. пробовал таким вариантом не выходит:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function parseTagsRecursive($input) {
  3.     $regex = '~foto/(.+)~iu';
  4.     $regex = '#https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?#i';
  5.    
  6.     return preg_replace_callback(
  7.     $regex,
  8.     function ($m) {
  9.         if ( preg_match('~foto/(.+)=(.+)\+(.+)~iu', $m[0]) ) {
  10.             $pattern = '~foto/(.+)=(.+)\+(.+)~iu';
  11.             $replace = '<div class="wp-caption aligncenter">'.
  12.                 '<img src="foto/$1" alt="$3" />'.
  13.                 '<div class="wp-caption-text">$2</div></div>';
  14.         } elseif ( preg_match('~foto/(.+)=(.+)~iu', $m[0]) ) {
  15.             $pattern = '~foto/(.+)=(.+)~iu';
  16.             $replace = '<div class="wp-caption aligncenter">'.
  17.                 '<img src="foto/$1" alt="$2" />'.
  18.                 '<div class="wp-caption-text">$2</div></div>';
  19.         } elseif ( preg_match('~foto/(.+)~iu', $m[0]) ) {
  20.             $pattern = '~foto/(.+)~iu';
  21.             $replace = '<div class="wp-caption_one aligncenter">'.
  22.                 '<img src="foto/$1" alt="" /></div>';
  23.         } elseif ( preg_match('#https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?#i', $m[0]) ) {
  24.             $pattern = '#https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?#i';
  25.             $replace = '<object width="500" height="375"><param name="wmode" value="opaque"></param><param name="movie" value="https://www.youtube.com/v/$2"></param><embed src="https://www.youtube.com/v/$2" type="application/x-shockwave-flash" width="500" height="375"></embed></param></embed></object>';
  26.         }
  27.  
  28.         return preg_replace($pattern, $replace, $m[0]);
  29.     },
  30.  
  31.     $input
  32. );
  33. }
  34.  
  35. $output = parseTagsRecursive($input);
  36.  
  37. echo $output;

при двух regex отрабатывает последний, а если ли возможность включить оба регулярных выражения?
(Добавление)
Сделал через:
PHP:
скопировать код в буфер обмена
  1.     $regex = array (
  2.         '~foto/(.+)~iu',
  3.         '#https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?#i'
  4.     );
  5.    


отображает и картинки и видео.
 
 Top
Строитель Модератор
Отправлено: 06 Апреля, 2017 - 08:07:36
Post Id



Участник


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


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




bellagio, надо организовать структуру функции parseTagsRecursive() таким образом, чтобы в её теле происходила конкатенация двух результатов - результата обработка картинок (код, написанный вчера), и результата обработки видео. Если сами не сможете это решить, то я вечером помогу.
(Добавление)
bellagio, пока написал пост, вы нашли решение )
 
 Top
bellagio
Отправлено: 09 Апреля, 2017 - 10:51:58
Post Id


Новичок


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


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




Хочу выразить благодарность Человеку с большой буквы - Строителю (извините не знаю вашего имени), который не только помогает с решением задачи, но и дает возможность сперва найти ее решение самому. Это действительно очень ценно.

Спасибо Вам!

По факту задачи, проверил на десятке статей - работает. К третьему виду отображения картинок, а именно:
CODE (htmlphp):
скопировать код в буфер обмена
  1. elseif ( preg_match('~foto/(.+)~iu', $m[0]) ) {
  2.             $pattern = '~foto/(.+)~iu';
  3.             $replace = '<div class="wp-caption_one aligncenter">'.
  4.                 '<img src="foto/$1" alt="" /></div>';
  5.         }


Прикрутил плавную подгрузку картинок на страницу - https://github[dot]com/aFarkas/lazysizes так как именно третий режим используется для добавления нескольких картинок одновременно.

Но и тут выяснился баг: редактор tinymce по умолчанию вставляет в строку ссылок для картинки, теги абзаца <p></p>. То есть ссылка выглядит:

и данный код пропускает этот текст.
 
 Top
Строитель Модератор
Отправлено: 09 Апреля, 2017 - 14:20:49
Post Id



Участник


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


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




bellagio, спасибо за оценку Закатив глазки Зовут меня Эдуард.
Что касается тегов - их можно или вырезать на входе в функцию, или снова ковырять шаблон. Первый вариант быстрее, и выглядит так:
Спойлер (Отобразить)

(Добавление)
Сори за фтопик Прикольный видео ролик, кстати ))

(Отредактировано автором: 09 Апреля, 2017 - 14:25:17)

 
 Top
bellagio
Отправлено: 09 Апреля, 2017 - 19:10:52
Post Id


Новичок


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


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




Очень приятно, я Александр. Будем знакомы.

По коду, спасибо. Замену видео тоже чуток укоротил:
CODE (htmlphp):
скопировать код в буфер обмена
  1.     $input = '
  2.     Тут вступление повествующее о необходимости увидеть этот летний пейзаж именно в этом году.
  3.     foto/1.png=картинка про лето+летний пейзаж
  4.     foto/2.png=картинка про лето
  5.     Тут летний пейзаж заканчивается и хочется пожелать...
  6.      
  7.     <p>foto/3.png</p>
  8.      
  9.     foto/1.png=картинка про лето+летний пейзаж
  10.     Ну и напоследок советую посмотреть видео ролик:
  11.     https://www.youtube.com/watch?v=rC9OnOWJnY4
  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/(.+)=(.+)\+(.+)~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/(.+)=(.+)~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/(.+)~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 = '<p><iframe style="display: block; margin-left: auto; margin-right: auto;" src="https://www.youtube.com/embed/$2" frameborder="0" width="500" height="375"></iframe></p>';
  40.                 }
  41.          
  42.                 return preg_replace($pattern, $replace, $m[0]);
  43.             },
  44.             strip_tags($input)
  45.         );
  46.     }


PS По видео: очень необычный стиль, необычный голос. Позитивно и не заезжено.
(Добавление)
Ошибку нашел. У меня есть код, который автоматически генерирует содержание, по заголовкам. И при текущем коде, теги оборачивающие содержащие его удаляются
 
 Top
Строитель Модератор
Отправлено: 09 Апреля, 2017 - 19:16:10
Post Id



Участник


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


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




bellagio пишет:
Очень приятно, я Александр. Будем знакомы.
Взаимно )
Совет: используйте bb-кнопку [PHP] для оформления вашего кода
 
 Top
bellagio
Отправлено: 09 Апреля, 2017 - 19:22:14
Post Id


Новичок


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


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




Строитель пишет:
Совет: используйте bb-кнопку [PHP] для оформления вашего кода

Учту.
Ошибку нашел. У меня есть код, который автоматически генерирует содержание, по заголовкам. И при текущем коде, теги оборачивающие содержание удаляются.

Возможно ли, исключить код начинающийся с тегов - <nav id="toc_container" class="no_bullets"> из списка обработки. Или как проще быть в такой ситуации?
(Добавление)
Не вариант, можно указать теги которые не должны удаляться, но их слишком много. это и заголовки и прочие мелочи. Нужно иное решение
 
 Top
Строитель Модератор
Отправлено: 09 Апреля, 2017 - 19:31:44
Post Id



Участник


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


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




bellagio пишет:
И при текущем коде, теги оборачивающие содержание удаляются.
Можно в strip_tags($input) передать вторым параметром html-теги, которые не нужно удалять. Например, чтобы оставить теги параграфа, нужно записать так:
 
 Top
bellagio
Отправлено: 09 Апреля, 2017 - 19:38:46
Post Id


Новичок


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


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




Строитель пишет:
которые не нужно удалять

Я уже выше написал, когда посмотрел свойства функции. Только что насчитал 9 тегов, и 2 обертки. Это и заголовки и реклама и абзацы, и прочие мелочи. А если введу новое что-то для текста, то все поплывет.

Думаю, что применить иное. Может пропускать тег перед проверкой по регулярном выражению?
(Добавление)
Получается, генерируются урлы типа - <img src="foto/27.jpg</p>" alt="">
Прибавляется тег </p>
 
 Top
Строитель Модератор
Отправлено: 09 Апреля, 2017 - 19:49:42
Post Id



Участник


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


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




bellagio пишет:
Может пропускать тег перед проверкой по регулярном выражению?
Ну наверное да. И вообще, правильно было бы расковырять регулярку, чем вырезать все теги.
(Добавление)
bellagio пишет:
Прибавляется тег </p>
Это в каком случае он прибавляется?
 
 Top
bellagio
Отправлено: 09 Апреля, 2017 - 20:00:46
Post Id


Новичок


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


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




во всех случаях, и для видео, и для картинок. Выход один, перед заменой картинки, нужно именно удалять теги абзаца <p></p>
 
 Top
Строитель Модератор
Отправлено: 09 Апреля, 2017 - 20:09:49
Post Id



Участник


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


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




bellagio пишет:
во всех случаях, и для видео, и для картинок. Выход один, перед заменой картинки, нужно именно удалять теги абзаца <p></p>
Ну да, я чуть выше об этом и говорил - нужно переписать шаблон.
 
 Top
bellagio
Отправлено: 09 Апреля, 2017 - 22:03:42
Post Id


Новичок


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


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




Сделал так:
PHP:
скопировать код в буфер обмена
  1.         $input = '
  2.        Тут вступление повествующее о необходимости увидеть этот летний пейзаж именно в этом году.
  3.        foto/1.png=картинка про лето+летний пейзаж
  4.        foto/2.png=картинка про лето
  5.        Тут летний пейзаж заканчивается и хочется пожелать...
  6.        
  7.        <p>foto/3.png</p>
  8.        
  9.        foto/1.png=картинка про лето+летний пейзаж
  10.        Ну и напоследок советую посмотреть видео ролик:
  11.        https://www.youtube.com/watch?v=rC9OnOWJnY4
  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/(.+)=(.+)\+(.+)</p>~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/(.+)=(.+)</p>~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/(.+)</p>~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 = '<p><iframe style="display: block; margin-left: auto; margin-right: auto;" src="https://www.youtube.com/embed/$2" frameborder="0" width="500" height="375"></iframe></p>';
  40.                     }
  41.              
  42.                     return preg_replace($pattern, $replace, $m[0]);
  43.                 },
  44.                 strip_tags($input)
  45.             );
  46.         }

конечный тег - </p> удалось убрать. Остался <p>. Какими только манипуляциями не пробовал, убрать не удается.

Пробовал первоначально так:
PHP:
скопировать код в буфер обмена
  1.     $regex = array (
  2.         '~photo/(.+)~iu',
  3.         '~https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?~i'
  4.     );
  5.     $regex1 = preg_replace('~<p(.*?)>(.*?)</p>~iu', '$2<br/>', $regex);

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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB