如何使用PHP删除字符串中的特定标点符号?

时间:2012-01-04 13:30:11

标签: php sql preg-replace

我目前正在使用此功能去除标点符号,但它就像一个无法控制的斧头凶手。

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

我希望更多地控制被剥离的内容。我想保留这些字符,字母和数字

/。 ,: - ?

这就是我现在想的所有这些

编辑:

这是查询db

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

编辑:

非常感谢大家,我现在就像炸弹一样工作。

2 个答案:

答案 0 :(得分:4)

您可以简单地将这些字符添加到您的角色类中,以避免被替换:

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

一些字符需要在字符类中使用反斜杠进行转义,否则它们具有特殊含义:您选择的regular expression delimiter,反斜杠,紧密方括号和连字符(除非它在开头或者字符类的结尾)。此外,您还需要转义引号,以便它不会过早终止PHP字符串文字。

答案 1 :(得分:0)

您可以使用以下内容代替使用正则表达式:

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

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

如果您不熟悉正则表达式,那么理解起来会更容易一些。

然而,这样做可能会有性能下降。