Модератор
Yuri
(@yube)
Лучше разобрать и собрать заново.
да если бы я умел, я бы разобрал 🙂
сижу вот на https://regex101.com, пытаюсь придумать, но ничего не выходит 🙁
Порядок следования alt важен? или структура там всегда постоянная? например такая img alt title src?
порядок следования совершенно не важен.
была бы структура постоянной — я бы просто обрезал ненужное, но там и alt и src может быть в любом порядке.
ну вот кто его знает, пользователей то, как они захреначат картинку?
если бы только в редакторе — было бы проще.
а так вставляют вручную в режиме Текст без того же alt и ищи его 🙁
или плагины те же — свой формат оформления картинок 🙁
чтобы оставить только src в img — уже навалом кода нашел.
но чтобы и src и alt — все никак не удается.
короче, переделал одну функцию, хрен знает правильно или нет.
function stripAttributes($s, $allowedattr = array()) {
if (preg_match_all("/<img[^>]*\\s([^>]*)\\/*>/msiU", $s, $res, PREG_SET_ORDER)) {
foreach ($res as $r) {
$tag = $r[0];
$attrs = array();
preg_match_all("/\\s.*=(['\"]).*\\1/msiU", " " . $r[1], $split, PREG_SET_ORDER);
foreach ($split as $spl) {
$attrs[] = $spl[0];
}
$newattrs = array();
foreach ($attrs as $a) {
$tmp = explode("=", $a);
if (trim($a) != "" && (!isset($tmp[1]) || (trim($tmp[0]) != "" && !in_array(strtolower(trim($tmp[0])), $allowedattr)))) {
} else {
$newattrs[] = $a;
}
}
sort($newattrs);
reset($newattrs);
$attrs = implode(" ", $newattrs);
$rpl = str_replace($r[1], $attrs, $tag);
$s = str_replace($tag, $rpl, $s);
}
}
//удаляем двойные пробелы в тексте
$s = preg_replace('/\s+/', ' ',$s);
//var_dump($s);
return $s;
}
вызывается так:
$content = stripAttributes($content,array('alt','src'));
вроде работает, но насколько это правильно тот еще вопрос.