2011-04-26 10 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タグからすべてのスタイル属性を取り除く必要があります。動作するはず

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

ような単純なものを使用して、あなたの場合は

+0

あなたの機能をしようとしているのは何ですか? – ianace

+0

これは非常に難しいことです.HTMLが完全に有効であると仮定しても、タグ/パラメータ/値のリストを抽出し、許可するものを選択して、すべてをまとめてステッチする必要があります。また、タグがミスマッチ/不正な形式である場合などに何が起こるかを考慮する必要があります。 HTMLは、可変であり、信頼性を解析するために柔軟性があります(これは何らかのセキュリティ機構であるため、堅牢性が必要と仮定しています)。他の場所で別の問題を抱えることでこの問題に遭遇したように思えます(最初はHTMLを許可するのはなぜですか?)。私はあなたがこれに対してまともな、信頼性の高い堅牢なソリューションを見つけられないだろうと思う。 – Basic

+0

ユーザーは、単語のテキストをコピーしてFCKEditor(Drupal)に貼り付けます。私はpとspanタグからすべてのスタイル属性を取り除く必要があります。 – coderama

答えて

0

、。引数が必要な場合は、試してみることができます

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

関連する問題