2016-05-31 10 views
0

私は自分のウェブサイトでユーザーの入力を受け取り、WYSIWYGエディターでフォーマットすることができます。htmlspecialcharsをエスケープ文字に変換する正規表現

今、PHPでENT_QUotesを使用してhtmlspecialcharsで取得した投稿全体を実行します。

そこから、正規表現を実行して、許可されたルールを実際のhtmlに戻したいと思います。

<p>TEXT</p> 

になるように

<p>TEXT</p> 

は、正規表現でこれを行う方法はありますか?私はそれと家族ではない。しかし、基本的にエスケープされたタグを探し、実際のタグに置き換え、すべてを真ん中に保ちますか?

編集:正規表現で有効なHTMLコードを作成します。まず、htmlspecialcharsを使って100%セキュアにして、すべてのエンティティのバージョン< &を取得します。それから私は正規表現を元に戻したいタグだけに変換したい。すべてのエンティティを標準に戻したいとは思いません。私が望むタグをデコードしたいだけです。例えば&lt;p&gt;TEXT&lt;/p&gt;の正規表現検索を<p>TEXT</p>に戻す - 私は<&>のように再変換したくないです。私が望むタグだけを再変換したい。この例では段落タグです。

+0

私はそれが有効なHTMLであることを望みます。私はhtmlspecialcharsを使って最初は100%安全です。それから私は正規表現を元に戻したいタグだけに変換したい。 – Incognito

+0

これは例です。私はREALのhtml「

TEXT

」 この方法で私は、エンティティへのすべてのユーザー入力をコードしているになるためにはhtmlspecialchars後に「> <P> TEXT </P」は「

TEXT

」のエンコードされたバージョンが欲しいです。その後、正規表現を使ってタグだけをコード化して、私は本物のhtmlに戻したいと思います。 – Incognito

+0

属性は許可されていません。すべての引用はhtmlspecialcharsのent_quotesでエスケープされます。 私は実際のバージョンにクォートを戻したくありません。 regedを使用して

のエンコードされたバージョンを見つけ、エンコードされたバージョンの末尾に

のテキストを置き、実際のhtmlに戻してください。 – Incognito

答えて

1

が必要だと思う:

/&lt;(\/?)(allowed_tags_here_seperated_by_|)&gt;/ 

正規表現のデモ:https://regex101.com/r/uX7cT1/1
PHPデモ:https://eval.in/579884

PHPの使用法:

$allowed_tags = array('p', 'h1'); 
$regex = '/&lt;(\/?)(' . implode('|', $allowed_tags) . ')&gt;/'; 
$test_string = '&lt;p&gt;TEXT&lt;/p&gt; This & that don\'t <decode> these though <h2> &lt;h1&gt; &lt;p class=&quot;test&quot;&gt;'; 
echo preg_replace($regex, '<$1$2>', $test_string); 

ああ、これは自己閉鎖要素も考慮していません。 <br /><hr /><img stuff />など

+0

自己閉鎖要素はありませんので問題ありません。私は編集者に
または改行を使用させませんでした。 それは素晴らしいと私はほしいとほぼ正確に見えます。しかし、私はそれがエンディングタグを探しているとは思わない? 開始タグと終了タグの両方を探して、それらをデコードしてすべてを中央に保持したいとします。それは理にかなっていますか?そうすれば、誰かが

と入力してタグを閉じることができなくても、ページ上のすべてのテキストを巨大な見出しにするだけではありません。 – Incognito

+0

閉鎖要素を検索しますが、開かれている要素があるかどうかは気にしません。そのようなものは、https://regex101.com/r/uX7cT1/2のようなものでしょうか? – chris85

+0

ありがとう、私はまだupvoteできません。 (十分な担当者ではない)しかし、あなたは素晴らしいです。 – Incognito

0

私はあなたが私はこの正規表現は、あなたがdecribedたもののために働くべきだと思いhtml_entity_decode()

+0

問題は、すべての文字を元に戻すかどうかです。私は元の出力全体をhtmlspecialchars。その後、私は、p、強く、blockquote、など、私は本当のhtmlに戻って変換したいと思うもの> そのようにすべてが私が許可するものをエスケープされたminsuです。 – Incognito

関連する問題