Нужна помощь по обработке данных в textarea (регулярка и прочее)?

danneo

Честный
Регистрация
13 Ноя 2007
Сообщения
1.526
Реакции
121
Подключил к полю виз.редактор tinymce (делаю в DLE).
Например, в textarea можно скопировать любой текст с другого сайта, где будут картинки, ссылки и вставить в поле. Все это так и вставится.
1 задача:
На стороне сервера нужно все это дело удалить:
  • ссылки, которые на другие сайты, оставив анкор ссылки
  • любые картинки, со сторонних сайтов
  • убрать все теги, которые нельзя использовать. Допустимые: H2-H4, a (со своего сайта), b, ul, ol, li, img (со своего сайта), p. strong.
2 задача:
После чего, у меня есть массив названий картинок, которые были загружены на сервер (во временный каталог), назовем его $arr_uploads (из скрытых полей input).
Нужно получить все картинки из textarea (которые остались после вырезания запрещенных тегов), и сравнить с $arr_uploads . Названия файлов из массива $arr_uploads, которые не были найдены в textarea, нужно будет удалить из временной папки сервера (это мусор). Это нужно, т.к. картинку в textarea пользователь могу удалить клавишей del, а с сервера нет. Оставшиеся скопируются в постоянный каталог.

Примерно все понимаю, но все же нужна помощь. С регуляркой у меня туго.

1. Не знаю как правильно вырезать теги, особенно те, что со ссылкой, ведущей на внешний сайт.
2. Как собрать массив всех названий картинок из textarea для дальнейшей обработки.
 
Ты через php текст будешь прогонять, или js'oм делать?
Для просмотра ссылки Войди или Зарегистрируйся вот так можно получить анкор, и функцией preg_replace заменить полную ссылку на то значение что получил Для просмотра ссылки Войди или Зарегистрируйся

Для просмотра ссылки Войди или Зарегистрируйся это картинки, но на php регулярка, на js переделать не проблемма. Но сам механизм сбора в js я не знаю :( я с ним не работал.
 
Ты через php текст будешь прогонять, или js'oм делать?
Для просмотра ссылки Войди или Зарегистрируйся вот так можно получить анкор, и функцией preg_replace заменить полную ссылку на то значение что получил Для просмотра ссылки Войди или Зарегистрируйся

Для просмотра ссылки Войди или Зарегистрируйся это картинки, но на php регулярка, на js переделать не проблемма. Но сам механизм сбора в js я не знаю :( я с ним не работал.
Делаю все на php. На стороне юзера, мне кажется, это делать лишнее.
Сайт с редактором функциональный, но не зная английского и легулярки, разобраться толком не смог. Да и не пользовался подобными. Получилось взять одну картинку, а когда их много в тексте, уже каша получалась.
Например, картинки... У них могут быть разные атрибуты (стандартные и нестандартные, типа data-holder=""), да и быть или не быть слеш на конце, пример: Для просмотра ссылки Войди или Зарегистрируйся

По ссылкам вообще не понял. Ну получил я массив анкоров (ссылок), и что? Мне то нужно вырезать все ссылки из текста, которые ведут на внешние сайты.
Может быть проблема в непонимании этого сайта, как использовать полученную регулярку.
 
Как собрать массив всех названий картинок. Для просмотра ссылки Войди или Зарегистрируйся
PHP:
$text = <<<LOL
Как собрать массив всех названий <img width="250" src="http://site.ru/img.jpg" class="img" />картинок из textarea для <img width="250" src="http://site.ru/img.jpg" class="img" />дальнейшей обрfdsfa sdfa sыва фыва фыва фыва фываф ыав<p>аб</p>оfas dfasdf
sadf asdf asdf a<img width="250" src="http://site.ru/img.jpg" class="img" />sdf asfdтки.
<img width="250" src="http://site.ru/images/folder/img.jpg" class="img" />
LOL;

preg_match_all('@<img[^>]+src="(?:[^"/]*/)+([^"]+)@i', $text, $matches);

print_r($matches[1]);

Удаление картинок со сторонних сайтов Для просмотра ссылки Войди или Зарегистрируйся.
Удаление ссылок на другие сайты, оставив анкор ссылки Для просмотра ссылки Войди или Зарегистрируйся
PHP:
// Удаление ссылок на другие сайты, оставив анкор ссылки
$text = preg_replace('@<a[^>]+href="http://(?:www\.)?+(?!mysite\.ru)[^>]*>(.*?)</a>@is', '\1', $text);

// Удаление картинок со сторонних сайтов
$text = preg_replace('@<img[^>]+src="http://(?:www\.)?+(?!mysite\.ru)[^>]*>@i', '', $text);

// Удаление всех тегов кроме допустимых
$text = preg_replace('@</?((h[2-4]|a|b|p|ul|ol|li|img|strong)[^>]*>\K|\S+[^>]*>)@i', '', $text);

echo $text;
 
Последнее редактирование:
Делаю все на php. На стороне юзера, мне кажется, это делать лишнее.
Сайт с редактором функциональный, но не зная английского и легулярки, разобраться толком не смог. Да и не пользовался подобными. Получилось взять одну картинку, а когда их много в тексте, уже каша получалась.
Например, картинки... У них могут быть разные атрибуты (стандартные и нестандартные, типа data-holder=""), да и быть или не быть слеш на конце, пример: Для просмотра ссылки Войди или Зарегистрируйся

По ссылкам вообще не понял. Ну получил я массив анкоров (ссылок), и что? Мне то нужно вырезать все ссылки из текста, которые ведут на внешние сайты.
Может быть проблема в непонимании этого сайта, как использовать полученную регулярку.
Этот сайт только для подбора и проверки регулярок. Что бы находило несколько вхождений - нужен модификатор "g" а в php это равнозначно preg_match_all(); для замены я писал - используй preg_replace(); на php.net все функции описаны и имеют много примеров.
 
Как собрать массив всех названий картинок. Для просмотра ссылки Войди или Зарегистрируйся
PHP:
$text = <<<LOL
Как собрать массив всех названий <img width="250" src="http://site.ru/img.jpg" class="img" />картинок из textarea для <img width="250" src="http://site.ru/img.jpg" class="img" />дальнейшей обрfdsfa sdfa sыва фыва фыва фыва фываф ыав<p>аб</p>оfas dfasdf
sadf asdf asdf a<img width="250" src="http://site.ru/img.jpg" class="img" />sdf asfdтки.
<img width="250" src="http://site.ru/images/folder/img.jpg" class="img" />
LOL;

preg_match_all('@<img[^>]+src="(?:[^"/]*/)+([^"]+)@i', $text, $matches);

print_r($matches[1]);

Удаление картинок со сторонних сайтов Для просмотра ссылки Войди или Зарегистрируйся.
Удаление ссылок на другие сайты, оставив анкор ссылки Для просмотра ссылки Войди или Зарегистрируйся
PHP:
// Удаление ссылок на другие сайты, оставив анкор ссылки
$text = preg_replace('@<a[^>]+href="http://(?:www\.)?+(?!mysite\.ru)[^>]*>(.*?)</a>@is', '\1', $text);

// Удаление картинок со сторонних сайтов
$text = preg_replace('@<img[^>]+src="http://(?:www\.)?+(?!mysite\.ru)[^>]*>@i', '', $text);

// Удаление всех тегов кроме допустимых
$text = preg_replace('@</?((h[2-4]|a|b|p|ul|ol|li|img|strong)[^>]*>\K|\S+[^>]*>)@i', '', $text);

echo $text;
Огромное кол-во времени сэкономили, благодарю!
Но есть небольшая проблемка с вырезанием разрешенных тегов (Удаление всех тегов кроме допустимых). После этого действия выводит хрень какую-то:
Код:
<p>




  0false

  falsefalse
  X-NONEX-NONE
 
А вообще есть же функция Для просмотра ссылки Войди или Зарегистрируйся
PHP:
$text = strip_tags($text, '<p><a><img><b><ul><ol><li><strong><h2><h3><h4>');
 
Назад
Сверху