2011-05-11 7 views
2

次のコードの目的は何ですか?PHPの正規表現

preg_replace('@<(script|style)[^>]*?>.*?</\\1>@si', '', $string); 

$文字列一致この式はどのような?

文字がある理由@

+0

これは、文字列 – Ibu

+0

からスクリプトタグを削除します。より良い方法は、striptags – Ibu

+2

を使用して8つの質問を受け入れ、0を受け入れることです。どうして? – Quamis

答えて

2

この正規表現は、文字列内の<script>...</style>または<style>...</style>(X)個のHTMLブロックと一致し、それらを削除します。これは、ユーザーがこれらの(潜在的に有害な)タグをユーザーにエコーバックする可能性のあるデータに挿入しないようにするために行われる可能性が高くなります。削除されないと、悪意のあるユーザーがサイトの外観を変更したり、サイトにJavaScriptを挿入してページコンテンツを書き換えたりすることができます。ユーザーが他のウェブサイトを自動的に訪問したり、他の多くの厄介なことを強制することさえあります。正規表現を定義するとき、彼らは伝統的に、たとえばスラッシュで囲まれ@については

....:

/regexphere/si 

正規表現の周り/は、第二のスラッシュを末尾にその境界線や文字を示しているが特定の方法で動作する正規表現エンジンのフラグ。特にiは「大文字小文字を区別しない」を意味し、sは、式の.が改行やタブのように空白と一致する必要があることを意味します。このフォーマットはPerlやそれを前提とした他のunixユーティリティからPHPによって継承されました。 / Sの多くは、自分のパターンであるとき、不要なエスケープを避けるためにかかわらず、

その他の文字(のような@または|または%)は、正規表現の周り/を置き換えるために使用することができます。たとえば、よりも簡単で読みやすく、@http://@と書くことができます。あなたのパターンでは、終了タグの/をエスケープしない方がやや簡単です。

2

@は、/のように区切り文字として使用されますが、まったく受け入れられます。

パターンが一致するスクリプトとスタイルタグです。

3

これはスクリプトまたはスタイルタグと一致します。 @はパターンの最初と最後であり、何も意味しません。