2011-09-30 171 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」,「水磨石,瓷磚和大理石二傳手」,

要替換這些字符用空格