この関数で二重引用符を含むフレーズを実行すると、引用符がquotに置き換えられます。
それらを完全に削除したい(一重引用符も)。それを行うために関数を変更するにはどうすればよいですか?
function string_sanitize($s) {
$result = preg_replace("/[^a-zA-Z0-9]+/", "", $s);
return $result;
}
更新:
Example 1: This is 'the' first example
returns: Thisis030the039firstexample
Errors: Warning: preg_match_all() [function.preg-match-all]: Unknown modifier '0' in C
Example 2: This is my "second" example
returns: Thisismyquotsecondquotexample
Errors: Invalid express in Xpath
元の文字列には"
("
)のHTML文字が含まれていたようです。したがって、文字列をサニタイズしようとすると、&
と;
を削除するだけです。文字列の残りの部分quot
。
---編集---
おそらく、英数字以外の文字を削除する最も簡単な方法は、HTML文字を html_entity_decode でデコードしてから、正規表現を実行することです。この場合、再コーディングする必要のあるものは何も取得されないため、再コーディングする必要はありません htmlentities ですが、覚えておく価値がありますhadHTMLデータがあり、raw unencodedデータがあります。
例えば:
function string_sanitize($s) {
$result = preg_replace("/[^a-zA-Z0-9]+/", "", html_entity_decode($s, ENT_QUOTES));
return $result;
}
ENT_QUOTES
は、関数に「...二重引用符と一重引用符の両方を変換する」というフラグを立てることに注意してください。
誤解を招く可能性があるため、その関数をstring_sanitize()
とは呼びません。 strip_non_alphanumeric()
と呼ぶことができます。
現在の関数は、大文字または小文字または数字以外のものをすべて削除します。
'
と"
だけを...で削除できます。
$str = str_replace(array('\'', '"'), '', $str);
Preg_replaceの呼び出しは次のようになります。
$result = preg_replace("/[^a-zA-Z0-9]+/", "", html_entity_decode($s));
詳細については、 html_entity_decode reference を参照してください。
一重引用符と二重引用符の両方の簡単な方法:)それでも、見た目と同じようなものが残ります。
$clean_string = str_replace('"', '``', str_replace("'", "`", $UserInput));
すべての種類の引用符(左側が右側の引用符と異なるものを含む)を確実に削除するには、次のようなものでなければならないと思います。
function string_sanitize($s) {
$result = htmlentities($s);
$result = preg_replace('/^(")(.*)(")$/', "$2", $result);
$result = preg_replace('/^(«)(.*)(»)$/', "$2", $result);
$result = preg_replace('/^(“)(.*)(”)$/', "$2", $result);
$result = preg_replace('/^(')(.*)(')$/', "$2", $result);
$result = html_entity_decode($result);
return $result;
}
関数は正規表現を使用して[a-zA-Z0-9]とは異なる文字を削除するため、「」または「」は確実に削除されます。
編集:まあ、ハミッシュの答えから、あなたの文字列はHTML文字列であることがわかりました。そのため、「(&quot)が「quot」に変換される理由を説明しています。"e
をpreg_replaceに置き換えるか、 htmlspecialchars_decode 最初。