2011-06-30 39 views
-2
の確認

可能性の重複:私は、変数には、特殊文字が存在するかどうかを確認する必要が私のレジスタシステムの一部として
preg_match php special characters特殊文字

。このチェックはどのように行うことができますか?最も正確な答えを与える人が最もよくなる。

+1

あなたがpplに手伝ってもらうために、plsはあなたの前の質問に対する回答を受け入れます。 – Balanivash

+0

「特殊文字」の定義は解釈の対象となります。あなたは "特殊文字"の意味を定義できますか?または、そのリストが短い場合、「特殊文字」とはみなされない文字はどれですか? –

+0

「最も正確な答えを出す人が最も得意な人」という意味は何ですか?これはコンテストではなくコミュニティです。 – Balanivash

答えて

0
$special_chars = // all the special characters you want to check for 
$string = // the string you want to check for 

if (preg_match('/'.$special_chars.'/', $string)) 
{ 
// special characters exist in the string. 
} 

「phpの特殊文字」のための迅速なGoogle検索は、いくつかの良い情報現れます詳細は

+0

ああええ、特別な文字をエスケープするのではなく、存在をチェックしたい場合は、これが行く方法です – Jasper

0

preg_matchのマニュアルを参照してください:ときあなたはhtmlエンティティを意味すると仮定すると

htmlentities() - http://php.net/manual/en/function.htmlentities.php 

htmlspecialchars() - http://php.net/manual/en/function.htmlspecialchars.php 
+1

私はあなたが読む必要があると思いますあなた自身が一度マニュアルを書いています。これらはすべての文字をHTMLエンティティに変換するために使用され、特殊文字が存在するかどうかをチェックしません。 – Balanivash

+0

あなたの投稿に私のコメントをチェックアウトします。 – Jasper

1

を「特別な文字」と言うと、これを使うことができます:

<?php 
$table = get_html_translation_table(HTML_ENTITIES, ENT_COMPAT, 'UTF-8'); 
$chars = implode('', array_keys($table)); 

if (preg_match("/[{$chars}]+/", $string) === 1) { 
    // special chars in string 
} 

get_html_translation_tableはすべての可能なhtmlエンティティを取得します。関数htmlspecialcharsが変換するエンティティのみが必要な場合は、HTML_ENTITIESの代わりにHTML_SPECIALCHARSを渡すことができます。 get_html_translation_tableの戻り値は、(htmlエンティティ、エスケープされたエンティティ)のペアの配列です。

次に、すべてのhtmlエンティティを[&"']+のような正規表現に入れたいと思います。これは、長さが1以上の角括弧内の文字のいずれかを含む部分文字列と一致します。したがって、変換テーブル(エンコードされていないhtmlエンティティ)のキーを取得するためにarray_keysを使用し、それらをまとめて1つの文字列にします。

次に正規表現に入れ、preg_matchを使用して文字列にこれらの文字が含まれているかどうかを確認します。 regular expression syntaxについては、PHPのドキュメントを参照してください。