web-dev-qa-db-ja.com

文字列から一重引用符と二重引用符を削除する方法

この関数で二重引用符を含むフレーズを実行すると、引用符が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
9
Scott B

元の文字列には"")の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は、関数に「...二重引用符と一重引用符の両方を変換する」というフラグを立てることに注意してください。

15
Hamish

誤解を招く可能性があるため、その関数をstring_sanitize()とは呼びません。 strip_non_alphanumeric()と呼ぶことができます。

現在の関数は、大文字または小文字または数字以外のものをすべて削除します。

'"だけを...で削除できます。

$str = str_replace(array('\'', '"'), '', $str); 
28
alex

Preg_replaceの呼び出しは次のようになります。

$result = preg_replace("/[^a-zA-Z0-9]+/", "", html_entity_decode($s));

詳細については、 html_entity_decode reference を参照してください。

2
anubhava

一重引用符と二重引用符の両方の簡単な方法:)それでも、見た目と同じようなものが残ります。

$clean_string = str_replace('"', '``', str_replace("'", "`", $UserInput));
1
Stnfordly

すべての種類の引用符(左側が右側の引用符と異なるものを含む)を確実に削除するには、次のようなものでなければならないと思います。

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;
}
0
gramo

関数は正規表現を使用して[a-zA-Z0-9]とは異なる文字を削除するため、「」または「」は確実に削除されます。

編集:まあ、ハミッシュの答えから、あなたの文字列はHTML文字列であることがわかりました。そのため、「(&quot)が「quot」に変換される理由を説明しています。&quoteをpreg_replaceに置き換えるか、 htmlspecialchars_decode 最初。

0
Hoàng Long