PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (3): [1] 2 3 »
Найдено сообщений: 37
bellagio
Отправлено: 11 Апреля, 2017 - 10:40:58 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3653
Текст стандартный, единственное, это вставки ссылок на видео и на картинки по шаблону для которого делаем код. Ну а сам редактор tinymce расставляет абзац к тексту и ссылкам. Пример текста:
Спойлер (Отобразить ) CODE (
htmlphp ):
скопировать код в буфер обмена
< h2> Орел и Решка</ h2>
< p> foto/10.jpg=орел и решка+спустя много лет</ p>
< p> С тех пор, как Жанна Бадоева без оглядки тратила деньги в Милане, Алан сделал первую татуировку в Риме, Андрей Бедняков изучал Шанхай с высоты птичьего полета, а Леся Никитюк охотилась на кабана в Праге, прошло целых шесть лет!</ p>
< p> foto/1.jpg=орел и решка+новые ведущие программы</ p>
< p> Жизнь в мировых столицах успела измениться. Появились новые достопримечательности и развлечения, жизнь в мировых столицах стала совсем другой. Чем сейчас живут Токио и Лондон? Сколько стоит уикенд в Барселоне? Чем кормят в самом модном ресторане Парижа? Новые ведущие «Орла и Решки» Настя Ивлеева и Антон Птушкин выяснят это!</ p>
< p> foto/2.jpg=перезагрузка</ p>
< p> Новые ведущие отправляются в большое турне по самым интересным городам нашей планеты. Она – популярный блогер с тремя миллионами подписчиков, он – бесстрашный сталкер и авантюрист. Из 150 точек мира, в которых побывали «Орел и решка», они вернутся в самые лучшие, чтобы открыть их заново!</ p>
< p> Великие города снова увидят легендарную монетку! Смотри премьеру нового тревел-шоу «Орел и решка. Перезагрузка» на < a href= "http://friday.ru/" > телеканале Пятница!</ a></ p>
< p> Полезное видео:</ p>
< p> https://www.youtube.com/watch?v=rC9OnOWJnY4</ p>
< p> Фотограллерея:</ p>
< p> foto/3.jpg</ p>
< p> foto/4.jpg</ p>
< p> foto/5.jpg</ p>
< p> foto/6.jpg</ p>
< p> foto/7.jpg</ p>
< p> foto/8.jpg</ p>
Строитель пишет: А чем вас не устраивает этот вариант?
в коде страницы появляется лишние теги абзаца </p> то есть картинка может выглядеть так:
CODE (
htmlphp ):
скопировать код в буфер обмена
< 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>
или появиться в:
А также, если открыть код страницы у видео остается неудаленный тег <p> перед видео:
CODE (
htmlphp ):
скопировать код в буфер обмена
< 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>
bellagio
Отправлено: 10 Апреля, 2017 - 09:26:25 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3653
Да, я немного два первых варианта поправил.
А вчера когда тестировали, смотрели в исходном тексте страницы, лишних тегов не было?
bellagio
Отправлено: 10 Апреля, 2017 - 09:00:26 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3653
Строитель пишет: Вы добавили теги параграфа к остальным картинкам?
Я имею ввиду, что первый тег <p> убирается, а конечный </p> нет. Так и у картинок и у видео. Это при текущей реализации кода
bellagio
Отправлено: 10 Апреля, 2017 - 07:44:25 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3653
дополнил:
CODE (
htmlphp ):
скопировать код в буфер обмена
$input = '
Тут вступление повествующее о необходимости увидеть этот летний пейзаж именно в этом году.
foto/1.jpg=картинка про лето+летний пейзаж
foto/2.jpg=картинка про лето
Тут летний пейзаж заканчивается и хочется пожелать...
< p> foto/3.jpg</ p>
foto/4.jpg=картинка про лето+летний пейзаж
Ну и напоследок советую посмотреть видео ролик:
< p> https://www.youtube.com/watch?v=rC9OnOWJnY4</ p>
';
echo parseTagsRecursive($input);
function parseTagsRecursive($input) {
return preg_replace_callback(
[
'~.*foto/(.+).*~iu',
'~https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?~i'
],
function ($m) {
if ( preg_match('~foto/(.+)=(.+)\+(.+)~iu', $m[0]) ) {
$pattern = '~.*foto/(.+)=(.+)\+(.+)</p>~iu';
$replace = '< div class= "wp-caption aligncenter" > '.
'< img src= "foto/$1 " alt= "$3 " /> '.
'< div class= "wp-caption-text" > $2</ div></ div> ';
} elseif ( preg_match('~foto/(.+)=(.+)~iu', $m[0]) ) {
$pattern = '~.*foto/(.+)=(.+)</ p> ~iu';
$replace = '< div class= "wp-caption aligncenter" > '.
'< img src= "foto/$1 " alt= "$2 " /> '.
'< div class= "wp-caption-text" > $2</ div></ div> ';
} elseif ( preg_match('~foto/(.+)~iu', $m[0]) ) {
$pattern = '~.*foto/(.+)</ p> ~iu';
$replace = '< div class= "wp-caption_one aligncenter" > '.
'< img src= "foto/$1 " alt= "" /></ div> ';
} elseif ( preg_match('~https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?~i', $m[0]) ) {
$pattern = '~https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?~i';
$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> ';
}
return preg_replace($pattern, $replace, $m[0]);
},
$input
);
}
Все вырезает, кроме тега <p> перед видео. Таким же способом, что и для картинок не вариант.
Кроме того, дополнив код - var_dump($m); и посмотрев исходный код страницы получаем:
PHP:
скопировать код в буфер обмена
[ 0 ] =>
string( 78 ) "<p>foto/1.jpg=картинка про лето+летний пейзаж</p>
"
[ 1 ] =>
string( 69 ) "1.jpg=картинка про лето+летний пейзаж</p>
"
}
[ 0 ] =>
string( 52 ) "<p>foto/2.jpg=картинка про лето</p>
"
[ 1 ] =>
string( 43 ) "2.jpg=картинка про лето</p>
"
}
[ 0 ] =>
string( 19 ) "<p>foto/3.jpg</p>
"
[ 1 ] =>
string( 10 ) "3.jpg</p>
"
}
[ 0 ] =>
string( 78 ) "<p>foto/4.jpg=картинка про лето+летний пейзаж</p>
"
[ 1 ] =>
string( 69 ) "4.jpg=картинка про лето+летний пейзаж</p>
"
}
[ 0 ] =>
string( 47 ) "https://www.youtube.com/watch?v=rC9OnOWJnY4</p>"
[ 1 ] =>
string( 4 ) "www."
[ 2 ] =>
string( 15 ) "rC9OnOWJnY4</p>"
}
получается, что конечный тег </p> еще цепляется. А хотя визуально картинки выводятся нормально. или я чего-то недопонимаю?
bellagio
Отправлено: 09 Апреля, 2017 - 22:03:42 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3653
Сделал так:
PHP:
скопировать код в буфер обмена
$input = '
Тут вступление повествующее о необходимости увидеть этот летний пейзаж именно в этом году.
foto/1.png=картинка про лето+летний пейзаж
foto/2.png=картинка про лето
Тут летний пейзаж заканчивается и хочется пожелать...
<p>foto/3.png</p>
foto/1.png=картинка про лето+летний пейзаж
Ну и напоследок советую посмотреть видео ролик:
https://www.youtube.com/watch?v=rC9OnOWJnY4
' ;
echo parseTagsRecursive( $input ) ;
function parseTagsRecursive( $input ) {
[
'~foto/(.+)~iu' ,
'~https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?~i'
] ,
function ( $m ) {
if ( preg_match ( '~foto/(.+)=(.+)\+(.+)</p>~iu' , $m [ 0
] ) ) { $pattern = '~foto/(.+)=(.+)\+(.+)</p>~iu' ;
$replace = '<div class="wp-caption aligncenter">' .
'<img src="foto/$1" alt="$3" />' .
'<div class="wp-caption-text">$2</div></div>' ;
} elseif ( preg_match ( '~foto/(.+)=(.+)</p>~iu' , $m [ 0
] ) ) { $pattern = '~foto/(.+)=(.+)</p>~iu' ;
$replace = '<div class="wp-caption aligncenter">' .
'<img src="foto/$1" alt="$2" />' .
'<div class="wp-caption-text">$2</div></div>' ;
} elseif ( preg_match ( '~foto/(.+)</p>~iu' , $m [ 0
] ) ) { $pattern = '~foto/(.+)</p>~iu' ;
$replace = '<div class="wp-caption_one aligncenter">' .
'<img src="foto/$1" alt="" /></div>' ;
} elseif ( preg_match ( '~https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?~i' , $m [ 0
] ) ) { $pattern = '~https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?~i' ;
$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>' ;
}
} ,
) ;
}
конечный тег - </p> удалось убрать. Остался <p>. Какими только манипуляциями не пробовал, убрать не удается.
Пробовал первоначально так:
без успешно
bellagio
Отправлено: 09 Апреля, 2017 - 20:00:46 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3653
во всех случаях, и для видео, и для картинок. Выход один, перед заменой картинки, нужно именно удалять теги абзаца <p></p>
bellagio
Отправлено: 09 Апреля, 2017 - 19:38:46 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3653
Строитель пишет: которые не нужно удалять
Я уже выше написал, когда посмотрел свойства функции. Только что насчитал 9 тегов, и 2 обертки. Это и заголовки и реклама и абзацы, и прочие мелочи. А если введу новое что-то для текста, то все поплывет.
Думаю, что применить иное. Может пропускать тег перед проверкой по регулярном выражению?
(Добавление)
Получается, генерируются урлы типа - <img src="foto/27.jpg</p>" alt="">
Прибавляется тег </p>
bellagio
Отправлено: 09 Апреля, 2017 - 19:22:14 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3653
Строитель пишет: Совет: используйте bb-кнопку [PHP] для оформления вашего кода
Учту.
Ошибку нашел. У меня есть код, который автоматически генерирует содержание, по заголовкам. И при текущем коде, теги оборачивающие содержание удаляются.
Возможно ли, исключить код начинающийся с тегов - <nav id="toc_container" class="no_bullets"> из списка обработки. Или как проще быть в такой ситуации?
(Добавление)
Не вариант, можно указать теги которые не должны удаляться, но их слишком много. это и заголовки и прочие мелочи. Нужно иное решение
bellagio
Отправлено: 09 Апреля, 2017 - 19:10:52 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3653
Очень приятно, я Александр. Будем знакомы.
По коду, спасибо. Замену видео тоже чуток укоротил:
CODE (
htmlphp ):
скопировать код в буфер обмена
$input = '
Тут вступление повествующее о необходимости увидеть этот летний пейзаж именно в этом году.
foto/1.png=картинка про лето+летний пейзаж
foto/2.png=картинка про лето
Тут летний пейзаж заканчивается и хочется пожелать...
< p> foto/3.png</ p>
foto/1.png=картинка про лето+летний пейзаж
Ну и напоследок советую посмотреть видео ролик:
https://www.youtube.com/watch?v=rC9OnOWJnY4
';
echo parseTagsRecursive($input);
function parseTagsRecursive($input) {
return preg_replace_callback(
[
'~foto/(.+)~iu',
'~https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?~i'
],
function ($m) {
if ( preg_match('~foto/(.+)=(.+)\+(.+)~iu', $m[0]) ) {
$pattern = '~foto/(.+)=(.+)\+(.+)~iu';
$replace = '< div class= "wp-caption aligncenter" > '.
'< img src= "foto/$1 " alt= "$3 " /> '.
'< div class= "wp-caption-text" > $2</ div></ div> ';
} elseif ( preg_match('~foto/(.+)=(.+)~iu', $m[0]) ) {
$pattern = '~foto/(.+)=(.+)~iu';
$replace = '< div class= "wp-caption aligncenter" > '.
'< img src= "foto/$1 " alt= "$2 " /> '.
'< div class= "wp-caption-text" > $2</ div></ div> ';
} elseif ( preg_match('~foto/(.+)~iu', $m[0]) ) {
$pattern = '~foto/(.+)~iu';
$replace = '< div class= "wp-caption_one aligncenter" > '.
'< img src= "foto/$1 " alt= "" /></ div> ';
} elseif ( preg_match('~https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?~i', $m[0]) ) {
$pattern = '~https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?~i';
$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> ';
}
return preg_replace($pattern, $replace, $m[0]);
},
strip_tags($input)
);
}
PS По видео: очень необычный стиль, необычный голос. Позитивно и не заезжено.
(Добавление)
Ошибку нашел. У меня есть код, который автоматически генерирует содержание, по заголовкам. И при текущем коде, теги оборачивающие содержащие его удаляются
bellagio
Отправлено: 09 Апреля, 2017 - 10:51:58 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3653
Хочу выразить благодарность Человеку с большой буквы - Строителю (извините не знаю вашего имени), который не только помогает с решением задачи, но и дает возможность сперва найти ее решение самому. Это действительно очень ценно.
Спасибо Вам!
По факту задачи, проверил на десятке статей - работает. К третьему виду отображения картинок, а именно:
CODE (
htmlphp ):
скопировать код в буфер обмена
elseif ( preg_match('~foto/(.+)~iu', $m[0]) ) {
$pattern = '~foto/(.+)~iu';
$replace = '< div class= "wp-caption_one aligncenter" > '.
'< img src= "foto/$1 " alt= "" /></ div> ';
}
Прикрутил плавную подгрузку картинок на страницу - https://github[dot]com/aFarkas/lazysizes так как именно третий режим используется для добавления нескольких картинок одновременно.
Но и тут выяснился баг: редактор tinymce по умолчанию вставляет в строку ссылок для картинки, теги абзаца <p></p>. То есть ссылка выглядит:
и данный код пропускает этот текст.
bellagio
Отправлено: 06 Апреля, 2017 - 07:44:14 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3653
Работает данный вариант, но как оформить еще и подхват видео. пробовал таким вариантом не выходит:
PHP:
скопировать код в буфер обмена
<?PHP
function parseTagsRecursive( $input ) {
$regex = '~foto/(.+)~iu' ;
$regex = '#https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?#i' ;
$regex ,
function ( $m ) {
if ( preg_match ( '~foto/(.+)=(.+)\+(.+)~iu' , $m [ 0
] ) ) { $pattern = '~foto/(.+)=(.+)\+(.+)~iu' ;
$replace = '<div class="wp-caption aligncenter">' .
'<img src="foto/$1" alt="$3" />' .
'<div class="wp-caption-text">$2</div></div>' ;
} elseif ( preg_match ( '~foto/(.+)=(.+)~iu' , $m [ 0
] ) ) { $pattern = '~foto/(.+)=(.+)~iu' ;
$replace = '<div class="wp-caption aligncenter">' .
'<img src="foto/$1" alt="$2" />' .
'<div class="wp-caption-text">$2</div></div>' ;
$pattern = '~foto/(.+)~iu' ;
$replace = '<div class="wp-caption_one aligncenter">' .
'<img src="foto/$1" alt="" /></div>' ;
} elseif ( preg_match ( '#https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?#i' , $m [ 0
] ) ) { $pattern = '#https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?#i' ;
$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>' ;
}
} ,
$input
) ;
}
$output = parseTagsRecursive( $input ) ;
echo $output ;
при двух regex отрабатывает последний, а если ли возможность включить оба регулярных выражения?
(Добавление)
Сделал через:
отображает и картинки и видео.
bellagio
Отправлено: 05 Апреля, 2017 - 22:06:45 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3653
Строитель отображается, но есть один момент, текстовая часть страницы плывет. То есть input может быть и такой:
PHP:
скопировать код в буфер обмена
$input = '
Тут вступление повествующее о необходимости увидеть этот летний пейзаж именно в этом году.
foto/1.png=картинка про лето+летний пейзаж
foto/2.png=картинка про лето
Тут летний пейзаж заканчивается и хочется пожелать...
foto/3.png
foto/1.png=картинка про лето+летний пейзаж
Ну и напоследок советую посмотреть видео ролик:
https://www.youtube.com/watch?v=rC9OnOWJnY4
' ;
То есть нужно учитывать что в input -e может быть не только графическая часть, но и иная
Страниц (3): [1] 2 3 »
Powered by ExBB FM 1.0 RC1. InvisionExBB