Я помню, как делал это раньше, но не могу найти код. Я использую str_replace для замены одного символа следующим образом: str_replace(':', ' ', $string);
но я хочу заменить все следующие символы \/:*?"<>|
, не выполняя 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()
перед preg_replace()
(или наоборот) в случае OP?
'~[\\+><-]~'
(обратите внимание, где -
это). Тире ( -
) - это метасимвол регулярного выражения, поэтому его нужно экранировать или стратегически поместить в класс символов (все внутри []
). См. Этот ответ: stackoverflow.com/a/7604888/396458
Если вы заменяете только отдельные символы, вам следует использовать 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;
результат
«Установщик спринклерных и противопожарных систем», «Пароуборщик», «Установщик терраццо, плитки и мрамора»,
Думаю, вы за этим следите:
// example
private const TEMPLATE = __DIR__.'/Resources/{type}_{language}.json';
...
public function templateFor(string $type, string $language): string
{
return \str_replace(['{type}', '{language}'], [$type, $language], self::TEMPLATE);
}
В моем случае использования я параметризовал некоторые поля в документе HTML, и после загрузки этих полей я сопоставляю и заменяю их с помощью метода str_replace.
<?php echo str_replace(array("{{client_name}}", "{{client_testing}}"), array('client_company_name', 'test'), 'html_document'); ?>