Borland_delphi_6 Опубликовано 30 Января 2008 Жалоба Поделиться Опубликовано 30 Января 2008 Модифицировал парсер форума, дабы он понимал мой тег [song]ID[/song], который вставляет флеш-плеер с загруженной песней с этим ID. Откуда чего и как грузит флешплеер - отношения к делу вроде бы не имеет. Итак, вот что у меня получилось. Сперва заменяем тег на HTML код при отправке поста: $txt = preg_replace( "#\[song\]([0-9]*)\[/song\]#ise", "'<div style=\"font-size: 10px; font-weight: bold;\">Для воспроизведения требуется Adobe Flash Player.</div><object type=\"application/x-shockwave-flash\" width=\"460\" height=\"16\" data=\"http://music.netultima.trc.local/modules/flash/xspf_jukebox.swf?autoplay=false&repeat_playlist=false&crossFade=false&shuffle=false&skin_url=http://music.netultima.trc.local/modules/flash/slim_gray/&playlist_url=http://music.netultima.trc.local/play/play-'.doEncrypt('\\1').'\"><param name=\"movie\" value=\"http://music.netultima.trc.local/modules/flash/xspf_jukebox.swf?repeat_playlist=false&crossFade=false&shuffle=false&skin_url=http://music.netultima.trc.local/modules/flash/slim_gray/&playlist_url=http://music.netultima.trc.local/play/play-'.doEncrypt('\\1').'\" /></object>'", $txt ); Теперь заменяем HTML код в БД обратно на теги при редактировании поста: $txt = preg_replace( "#<div style=\"font-size: 10px; font-weight: bold;\">Для воспроизведения требуется Adobe Flash Player.</div><object type=\"application/x-shockwave-flash\" width=\"460\" height=\"16\" data=\"http://music.netultima.trc.local/modules/flash/xspf_jukebox.swf\?autoplay=false&repeat_playlist=false&crossFade=false&shuffle=false&skin_url=http://music.netultima.trc.local/modules/flash/slim_gray/&playlist_url=http://music.netultima.trc.local/play/play-(.*)\"><param name=\"movie\" value=\"http://music.netultima.trc.local/modules/flash/xspf_jukebox.swf\?repeat_playlist=false&crossFade=false&shuffle=false&skin_url=http://music.netultima.trc.local/modules/flash/slim_gray/&playlist_url=http://music.netultima.trc.local/play/play-(.*)\" /></object>#ise", "'[song]'. doDecryptFullHash('\\1').'[/song]'", $txt ); Все работает замечательно, если в посте присутствует только один тег [song]. Если же их несколько, то при попытке отредактировать наблюдаем только один тег, ссылающийся на нулевой ID, т.е. в посте остается только [song]0[/song], остальные теги [song] пропадают. Содержимое поста при этом не страдает, только содержимое тегов [song]. В чем может быть косяк? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 30 Января 2008 Жалоба Поделиться Опубликовано 30 Января 2008 Странно, что остальные не страдают, но я бы в первую очередь попробывал в пре_едит использовать не ., а также [0-9], и поставить в обоих случаях ограничение на жадность: ([0-9]*?). Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 30 Января 2008 Жалоба Поделиться Опубликовано 30 Января 2008 Перво-наперво непонятно зачем использовал в регвыре модификатор e. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Borland_delphi_6 Опубликовано 30 Января 2008 Автор Жалоба Поделиться Опубликовано 30 Января 2008 To Song: там используется PHP-функция: "'[song]'. doDecryptFullHash('\\1').'[/song]'", $txt ); Я так понял из манов, "e" нужен для того, чтобы выполнять код. To Sannis: не совсем понял, о чем речь, к сожалению. Я так понимаю, проблема в обратном преобразовании HTML в тег?Кстати, во втором случае использовать 0-9 не получится, потому как от цифор там не остается ничего. См. ниже пример кода. PS: Проверил, HTML код генерируется абсолютно нормально и при вставке нескольких тегов, два фрагмента кода ничем не отличаются друг от друга. Если это может пригодиться, генерируется код такого вида: <object type="application/x-shockwave-flash" width="460" height="16" data="http://music.netultima.trc.local/modules/flash/xspf_jukebox.swf?autoplay=false&repeat_playlist=false&crossFade=false&shuffle=false&skin_url=http://music.netultima.trc.local/modules/flash/slim_gray/&playlist_url=http://music.netultima.trc.local/play/play-be046eb1cd3b1449-217f-46ec73749e5b81dd"><param name="movie" value="http://music.netultima.trc.local/modules/flash/xspf_jukebox.swf?repeat_playlist=false&crossFade=false&shuffle=false&skin_url=http://music.netultima.trc.local/modules/flash/slim_gray/&playlist_url=http://music.netultima.trc.local/play/play-be046eb1cd3b1449-217f-46ec73749e5b81dd" /></object> (да простит меня форум за очередной горизонтальный скролл) Add: есть прогресс. Если во втором случае заменить (.*) на (.+?) - один из тегов остается в живых и ID в нем верный, а второй тег все равно кушается. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 30 Января 2008 Жалоба Поделиться Опубликовано 30 Января 2008 $txt = preg_replace( "#<div style=\"font-size: 10px; font-weight: bold;\">Для воспроизведения требуется Adobe Flash Player.</div><object type=\"application/x-shockwave-flash\" width=\"460\" height=\"16\" data=\"http://music.netultima.trc.local/modules/flash/xspf_jukebox.swf\?autoplay=false&repeat_playlist=false&crossFade=false&shuffle=false&skin_url=http://music.netultima.trc.local/modules/flash/slim_gray/&playlist_url=http://music.netultima.trc.local/play/play-(.+?)\"><param name=\"movie\" value=\"http://music.netultima.trc.local/modules/flash/xspf_jukebox.swf\?repeat_playlist=false&crossFade=false&shuffle=false&skin_url=http://music.netultima.trc.local/modules/flash/slim_gray/&playlist_url=http://music.netultima.trc.local/play/play-\\1\" /></object>#ise", "'[song]'. doDecryptFullHash('\\1').'[/song]'", $txt );? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Borland_delphi_6 Опубликовано 30 Января 2008 Автор Жалоба Поделиться Опубликовано 30 Января 2008 Sannis, ты как всегда прав! Спасибо огромное! Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.