Я помню, как это делалось раньше, но не могу найти код. Я использую 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;
результат
«Установщик спринклера и противопожарной защиты», «Пароход», «Терраццо, плитка и мраморный сеттер»,