2016-12-06 17 views
2

私は不要なHTMLタグを取り除くための関数を持っています。 例えばPHP:私のstrip_tags( '<', '<br>')が空の文字列を返すのはなぜですか?

function getValidStrings($inputStr, $allowedTag) { 
    return trim(strip_tags($inputStr, $allowedTag)); 
} // End function 

// Here I am calling this function which is defined in an included php Class file 
$formatter = new $StringTextFormatter; 

$validString = $formatter->getValidStrings('<', '<br>'); 
// The $validString has empty string "" ... Why ? 

私はstrip_tagsに '<' 文字を渡すと、それが空を返します。 しかし、 '>'を渡すとstrip_tagsは正しいcharを返します。

私は上記の呼び出しから '<'を返すことができる必要があります。 解決策が何であるか考えてみましょうか?

+1

2番目のパラメータが許可されているタグを動作させるためにHTMLにも、リモートで近いものになるように持って、 '<'タグではありません。あなたは何をするつもりですか? – AbraCadaver

+0

_ **警告** strip_tags()は実際にHTMLを検証しないので、部分的または壊れたタグは、予想より多くのテキスト/データを削除する可能性があります。http://php.net/manual/en/function .strip-tags.php – Clive

+0

正しい。しかし、入力文字列に "<"文字が含まれている場合、strip_tagsで処理できるはずはありませんか?同じチャットを返しますか?それは単なる文字であり、完全なタグではないからです。 – Andy

答えて

0

あなたはhtmlコンテキストにいるためです。 htmlパーサーが<に遭遇した場合、これはオープニングタグです。それに相当するHTMLエンティティに置き換えることを<はその意味を持っていない場合は、その後必要&lt;

1

Federkunが言ったように、それはタグの開始として<を見ています。あなたは壊れたHTMLを渡し、あなたが望むものを提供するために最善を尽くしました。(ほとんどの)HTMLがない文字列です。クライヴが指摘したように、彼らは、strip_tags()が実際にHTMLを検証しませんので、部分的または壊れたタグが予想よりも多くのテキスト/データの削除につながることができ、手動

にこのことについてあなたに警告しました。

この後に何かを渡すと、<も取り除かれます。それは、それが適切に

echo strip_tags('<bad HTML string here<br>'); // empty string 
echo strip_tags('<bad HTML<br> Hello!'); // Also empty 
echo strip_tags('<bad HTML> Hello!'); // Hello! 
関連する問題