2012-01-04 77 views
1

我目前正在使用此功能去除標點符號,但它就像一個不可戰勝的斧頭兇手。如何使用PHP去除字符串中的特定標點符號?

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

我想更好地控制什麼被剝離。我想保留這些字符,字母和數字的課程

/。 ,: - ?

這就是所有的人,我認爲現在

編輯:

這是查詢的數據庫

"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%'" 

編輯SQL:

非常感謝大家,我有它現在像炸彈一樣工作。

回答

4

您可以將這些字符簡單地添加到您的字符類,以避免它們被替換:

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

幾個字符將需要與角色職業,否則他們有特殊的含義內反斜槓轉義:您的選擇regular expression delimiter,反斜槓,近似方括號和連字符(除非它位於字符類的開頭或末尾)。此外,您還需要轉義引號以便它不會過早終止PHP字符串文字。

+0

我該如何逃避角色?感謝您的快速回復。 – Mark 2012-01-04 13:37:31

+0

我需要我的搜索才能找到ac/dc。如何將/ in放入,因爲當我放入時,它會將所有記錄拉出 – Mark 2012-01-04 13:44:33

+0

@ user1124199:您可以發佈用於查詢數據庫的代碼嗎? – 2012-01-04 13:49:58

0

而不是使用正則表達式,你可以使用這樣的事情:

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

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

這是一個有點更容易理解,如果你不熟悉正則表達式。

但是,這樣做可能會導致性能下降。

+0

僅供參考:str_replace可以將數組作爲第一個參數,同時將第二個參數保留爲字符串,用該字符串替換數組中的所有字符。因此,您可以刪除for循環並只使用:$ string = str_replace($ symbols,'',$ string); – Narcissus 2012-01-04 14:54:08

相關問題