Str_replace для нескольких элементов

Я помню, как это делалось раньше, но не могу найти код. Я использую str_replace для замены одного символа следующим образом: str_replace(':', ' ', $string); но я хочу заменить все следующие символы \/:*?"<>| , не делая str_replace для каждого.

str_replace() может принимать массив, чтобы вы могли:

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

В качестве альтернативы вы можете использовать preg_replace() :

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

Как это:

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

Или, в современном PHP (что-либо начиная с 5,4 года), незначительно менее многословный:

 str_replace([':', '\\', '/', '*'], ' ', $string); 
 str_replace( array("search","items"), array("replace", "items"), $string ); 

Например , если вы хотите заменить search1 на replace1 и search2 на replace2, то следующий код будет работать:

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

// Выход: replace1 replace2

Если вы заменяете только отдельные символы, вы должны использовать strtr()

Вы можете использовать preg_replace () . Следующий пример можно запустить с помощью командной строки php:

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

Вывод:

$ s2: "строка"

У меня была ситуация, при которой мне пришлось заменять теги 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; 

результат

«Установщик спринклера и противопожарной защиты», «Пароход», «Терраццо, плитка и мраморный сеттер»,