Вот одна функция, которая позволит вам удалить все атрибуты, кроме тех, которые вам нужны:
function stripAttributes($s, $allowedattr = array()) {
if (preg_match_all("/<[^>]*\\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;
}
}
$attrs = implode(" ", $newattrs);
$rpl = str_replace($r[1], $attrs, $tag);
$s = str_replace($tag, $rpl, $s);
}
}
return $s;
}
В примере это будет:
echo stripAttributes('<p class="one" otherrandomattribute="two">');
или, если вы, например. хотите сохранить атрибут "класс":
echo stripAttributes('<p class="one" otherrandomattribute="two">', array('class'));
или
Предполагая, что вы должны отправить сообщение в почтовый ящик, и вы создали сообщение с помощью CKEDITOR, вы можете назначить функцию следующим образом и передать ее переменной $ message перед отправкой. Обратите внимание, что функция с именем stripAttributes () удалит все ненужные HTML-теги. Я попробовал, и все работает нормально. я только видел форматирование, которое я добавил как полужирный e.t.c.
$message = stripAttributes($_POST['message']);
или
Вы можете echo $message;
для предварительного просмотра.