2011-04-26 1 views
1

мне нужна функция, как это:PHP: Как вырезать теги в строке с определенными атрибутами, которые имеют определенные значения?

function strip_tags_with_attribute_values($string, $allowedTags, $allowedAttribute, $allowedValue) { 

    ... 

} 

И он должен давать результаты, как это:

$str = '<p class="bla">hello1</p><p class='bla2'>hello2</p>'; 
echo strip_tags_with_attribute_values($str, '<p>', 'class', 'bla'); 

должны производить:

hello1<p class='bla2'>hello2</p> 

Зачем мне это нужно? Пользователи копируют и вставляют текст из слова в FCKEditor (в Drupal). Мне нужно удалить все атрибуты стиля из тегов p и span.

+0

Каковы ваши попытки сделать функцию? – ianace

+0

Это будет очень сложно сделать. Даже если HTML абсолютно корректен, вам нужно извлечь список тегов/params/values, выбрать тот, который вы разрешите, и сшить все вместе. Вам также необходимо учитывать, что происходит, когда теги несовместимы/искажены/и т. Д. HTML слишком разнообразен и гибкий для надежного анализа (я предполагаю, что требуется надежность, так как это какой-то механизм безопасности?). Похоже, вы столкнулись с этой проблемой, столкнувшись с другой проблемой в другом месте (зачем вообще разрешать HTML?). Я подозреваю, что вы не найдете достойного, надежного и надежного решения для этого. – Basic

+0

Пользователи копируют и вставляют текст из слова в FCKEditor (в Drupal). Мне нужно удалить все атрибуты стиля из тегов p и span. – coderama

ответ

0

В вашем случае, используя что-то же просто, как

$str = preg_replace("/<p class=\"(bla)\">(.+?)<\/p>/is", "$2", $str); 

должны работать. Если вам нужны аргументы, вы можете попробовать

function strip_tags_with_attribute_values($str, $tag, $att, $val) 
{ 
    $pat = "/<{$tag} {$att}=\"{$val}\">(.+?)<\/{$tag}>/is"; 
    $str = preg_replace($pat, "$1", $str); 
    return $str; 
} 

Или что-то подобное. Это не будет работать корректно, если тег имеет несколько атрибутов. Если это ваш случай, вы, вероятно, захотите попробовать использовать объект DOM или XPATH, чтобы удалить их.

+0

Этот код не работает ... – coderama

 Смежные вопросы

  • Нет связанных вопросов^_^