2011-09-30 96 views
58

我记得之前做过这个,但是找不到代码。我使用str_replace替换这样的一个字符:str_replace(':', ' ', $string);但我想要替换所有以下字符\/:*?"<>|,而不是为每个字符执行str_replace。Str_replace对于多个项目

+1

? –

+7

不要害怕引用优秀的php.net手册和[复习参数部分](http://php.net/str_replace),看看你想要什么是可能的。 –

回答

64

str_replace()可以采取一个阵列,所以你可以这样做:

$new_str = str_replace(str_split('\\/:*?"<>|'), ' ', $string); 

另外,您可以使用preg_replace()

$new_str = preg_replace('~[\\\\/:*?"<>|]~', ' ', $string); 
+1

假设OP意味着应该替换反斜杠,那preg_replace模式对我来说不起作用。为了让反斜杠按预期工作,我必须在模式中使用其中的4个(即“\\\\”)。 – GreenMatt

+0

@GreenMatt你是对的。 – NullUserException

+0

好的答案,加入@dogbert答案将使它完成不阅读手册,并没有意识到str_split返回一个数组的人。 – Bradmage

118

像这样:

str_replace(array(':', '\\', '/', '*'), ' ', $string); 

或者说,在现代PHP(从5.4起任何东西),则略低少罗嗦:

str_replace([':', '\\', '/', '*'], ' ', $string); 
+0

绝对最有效的答案 – zoltar

1

你可以使用preg_replace()。下面的例子可以使用命令行的PHP中运行:

<?php 
$s1 = "the string \\/:*?\"<>|"; 
$s2 = preg_replace("^[\\\\/:\*\?\"<>\|]^", " ", $s1) ; 
echo "\n\$s2: \"" . $s2 . "\"\n"; 
?> 

输出:

$ S2: “字符串                   ”

38
str_replace(
    array("search","items"), 
    array("replace", "items"), 
    $string 
); 
6

如果你只更换单个字符,你应该使用strtr()

+1

仅限单个字符?怎么来的? –

38

例如,如果要更换search1与replace1和search2与replace2然后下面的代码将工作:

print str_replace(
    array("search1","search2"), 
    array("replace1", "replace2"), 
    "search1 search2" 
); 

//输出:replace1 replace2

+0

不错!莫名其妙的逻辑,但我不知道:) –

0

我有一个情况,即我有两个不同的结果替换来取代HTML标签。

$trades = "<li>Sprinkler and Fire  Protection Installer</li> 
<li>Steamfitter </li> 
<li>Terrazzo, Tile and Marble  Setter</li>"; 

$s1 = str_replace('<li>', '"', $trades); 

$s2 = str_replace('</li>', '",', $s1); 

echo $s2; 

结果

“自动喷水灭火和防火安装程序”,“Steamfitter”,“水磨石,瓷砖和大理石二传手”,

要替换这些字符用空格