web-dev-qa-db-ja.com

文字列から特殊文字を削除する

文字列から特殊文字を削除するための関数を使用しています。

function clean($string) {
   $string = str_replace('', '-', $string); // Replaces all spaces with hyphens.
   return preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.
}

そして、これがテストケースです

echo clean('a|"bc!@£de^&$f g');
Will output: abcdef-g

SO Answer。からの参照。問題は、もし 'が文字列の最後の文字である場合、Excelファイルから文字列America'を取得する場合、関数、それは'をエスケープしません。最初と最後の文字が'である場合、任意のヘルプ

11
user1765876

通常の期待変化を置き換えようとする

preg_replace('/[^A-Za-z0-9\-]/', '', $string);

preg_replace("/[^A-Za-z0-9\-\']/", '', $string);  // escape apostraphe

または

str_replacepreg_replace() よりも迅速かつ簡単です。正規表現を使用しないためです。

$text = str_replace("'", '', $string);
14
user2092317

上記の例からより詳細な方法で、以下を考慮して文字列です:

_$string = '<div>This..</div> <a>is<a/> <strong>hello</strong> <i>world</i> ! هذا هو مرحبا العالم! !@#$%^&&**(*)<>?:";p[]"/.,\|`~1@#$%^&^&*(()908978867564564534423412313`1`` "Arabic Text نص عربي test 123 و,.m,............ ~~~ ٍ،]ٍْ}~ِ]ٍ}"; ';
_

コード:

_echo preg_replace('/[^A-Za-z0-9 !@#$%^&*().]/u','', strip_tags($string));
_

_Allows:_英字(大文字と小文字)、0〜9および文字!@#$%^&*().

_Removes:_すべてのhtmlタグ、および上記以外の特殊文字

6
Aditya P Bhatt

一見すると、addslashes関数が出発点になると思います。 http://php.net/manual/en/function.addslashes.php

0
user2864030

間違いなくより良いパターンがありますが、これは文字列全体で機能するはずです:

preg_replace("/^'|[^A-Za-z0-9\'-]|'$/", '', $string);

文字列内の単語の周りでそれらを置き換える必要がある場合は、Wordの境界に\ bを使用する必要があります。また、開始または終了で倍数を置き換える場合は、それらに+を追加する必要があります。

0
AbraCadaver