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

如何使用php去除字符串中的特定标点符号?,php,sql,preg-replace,Php,Sql,Preg Replace,我目前正在使用这个函数去除标点符号,但它就像一个无法控制的斧头杀手 <?php $search = preg_replace("/[^a-zA-Z 0-9]+/", " ", $search);?> 编辑: 非常感谢大家,我现在可以像炸弹一样工作了。您可以简单地将这些角色添加到您的角色类中,以避免它们被替换: preg_replace('#[^a-zA-Z 0-9/.,:?-]+#', " ", $search); # ^^^^^^

我目前正在使用这个函数去除标点符号,但它就像一个无法控制的斧头杀手

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


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

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

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

在character类中,一些字符需要用反斜杠转义,否则它们有特殊含义:您选择的字符、反斜杠、右方括号和连字符(除非它位于character类的开头或结尾)。此外,您还需要转义引号,以便它不会过早终止PHP字符串文字。

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

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

在character类中,一些字符需要用反斜杠转义,否则它们有特殊含义:您选择的字符、反斜杠、右方括号和连字符(除非它位于character类的开头或结尾)。您还需要对引号进行转义,以便它不会过早终止PHP字符串文字。

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

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

for ($i = 0; $i < sizeof($symbols); $i++) {
    $string = str_replace($symbols[$i],' ',$string);
}
$symbols=array(“/”、“\\”、“\”、“,”、“?”、“;”、“:”、“[”、“]”、“{”、“}”、“|”、“=”、“+”、“-”、“\”、“)、“(”、“*”、“&”、“^'、“%、“$”、“!”、“~”、“,“,”;
对于($i=0;$i
如果您不熟悉正则表达式,则更容易理解


但是,这样做可能会降低性能。

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

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

for ($i = 0; $i < sizeof($symbols); $i++) {
    $string = str_replace($symbols[$i],' ',$string);
}
$symbols=array(“/”、“\\”、“\”、“,”、“?”、“;”、“:”、“[”、“]”、“{”、“}”、“|”、“=”、“+”、“-”、“\”、“)、“(”、“*”、“&”、“^'、“%、“$”、“!”、“~”、“,“,”;
对于($i=0;$i
如果您不熟悉正则表达式,则更容易理解


但是,这样做可能会降低性能。

如何转义角色?谢谢你的快速回复。我需要我的搜索来找到ac/dc。我怎么把/放进去,因为当我把它放进去的时候,它会把我所有的记录都取出来out@user1124199:您可以发布用于查询数据库的代码吗?@user1124199:在正则表达式的上下文中,使用反斜杠“\”转义字符类中的特殊字符。如果您在PHP中使用双引号字符串,请小心,因为该上下文的转义字符也是反斜杠,这意味着您在某些情况下可能必须将转义加倍。@user1124199:我更新了我的帖子,以说明如何通过更改分隔符在正则表达式中包含“/”。如何转义字符?谢谢你的快速回复。我需要我的搜索来找到ac/dc。我怎么把/放进去,因为当我把它放进去的时候,它会把我所有的记录都取出来out@user1124199:您可以发布用于查询数据库的代码吗?@user1124199:在正则表达式的上下文中,使用反斜杠“\”转义字符类中的特殊字符。如果在PHP中使用双引号字符串,请小心,因为该上下文的转义字符也是反斜杠,这意味着您在某些情况下可能必须加倍转义。@user1124199:我更新了我的帖子,以说明如何通过更改分隔符在正则表达式中包含“/”。仅供参考:str_replace可以将数组作为第一个参数,而将第二个参数保留为字符串,将数组中的所有字符替换为该字符串。因此,您可以删除for循环,只需使用:$string=str_replace($symbols,,$string);仅供参考:str_replace可以将数组作为第一个参数,而将第二个参数保留为字符串,用该字符串替换数组中的所有字符。因此,您可以删除for循环,只需使用:$string=str_replace($symbols,,$string);