2012-01-04 4 views
1

私は現在、句読点を取り除くのにこの機能を使用していますが、それは制御不能な斧殺人犯のようです。phpを使って文字列内の特定の句読点を取り除く方法は?

<?php $search = preg_replace("/[^a-zA-Z 0-9]+/", " ", $search);?> 

削除された内容をより詳細に管理したい私はこれらの文字と文字と数字を保持したいと思います

/。 、: - ?

ザッツ私は今

EDITのためだと思うそれらのすべて:すべての人へ

多くのおかげで、私が持っている:

これは、クエリはデシベル

"SELECT c.ARTIST, c.TITLE, c.`CAT NO.`, c.FORMAT, c.`IMAGE PATH` FROM tracklisting t 
RIGHT JOIN catelogue c ON c.`CAT NO.` = t.`TRACKLISTING CAT NO.` 
WHERE t.`ARTIST` LIKE '%$search%' OR t.`TRACK TITLE` LIKE '%$search%'OR c.`ARTIST` LIKE '%$search%' OR c.`TITLE` LIKE '%$search%'" 

EDITのSQLです今は爆弾のように働いています。

答えて

4

あなたは単純に置き換えられ、それらを避けるために、あなたのキャラクタークラスにこれらの文字を追加することができます。

preg_replace('#[^a-zA-Z 0-9/.,:?-]+#', " ", $search); 
#       ^^^^^^ 

数文字は、そうでない場合、彼らは特別な意味を持つ文字クラス内のバックスラッシュでエスケープする必要があります:あなたのregular expression delimiter、バックスラッシュ、閉じた角かっこ、ハイフン(文字クラスの先頭または末尾にある場合を除く)を選択します。また、引用符をエスケープして、PHPの文字列リテラルを途中で終了させないようにする必要があります。正規表現を使用して慣れていない場合は理解して

$symbols = array('/','\\','\'','"',',','<','>','?',';',':','[',']','{','}','|','=','+','-','_',')','(','*','&','^','%','$','#','@','!','~','`'); 

for ($i = 0; $i < sizeof($symbols); $i++) { 
    $string = str_replace($symbols[$i],' ',$string); 
} 

にです少し簡単:

+0

文字をエスケープするにはどうすればよいですか?早速のお返事ありがとうございます。 – Mark

+0

ac/dcを探すために私の検索が必要です。/inはどのように置くのですか?すべてのレコードを取り出します。 – Mark

+0

@ user1124199:データベースのクエリに使用するコードを投稿できますか? –

0

は、代わりに正規表現を使用して、あなたはこのようなものを使用することができます。

しかし、このようにパフォーマンスが低下する可能性があります。

+0

FYI:str_replaceは、配列のすべての文字をその文字列に置き換えて、2番目のパラメータを文字列に維持しながら、最初のパラメータとして配列をとることができます。したがって、あなたはforループを削除し、ちょうど$ string = str_replace($ symbols、 ''、$ string);を使うことができます。 – Narcissus

関連する問題