用于多个项的 Str_place

我记得以前这么做过,但找不到密码。我使用 str _ place 替换一个字符,如下所示: str_replace(':', ' ', $string);,但是我想替换以下所有字符 \/:*?"<>|,而不对每个字符执行 str _ place。

268626 次浏览

像这样:

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

或者,在现代 PHP (从5.4开始的任何东西)中,稍微不那么冗长的:

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

您可以使用 Preg _ place ():

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

产出:

$s2: “ the string”

str_replace() 可以接受一个数组,因此可以这样做:

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

或者你可以使用 preg_replace():

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

如果只替换单个字符,则应使用 strtr()

例如 ,如果您想用 replace1替换 search1,用 replace2替换 search2,那么以下代码可以工作:

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

//输出: replace 1 replace 2

我遇到过这样的情况: 我必须用两个不同的替换结果来替换 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 _ place 方法来匹配和替换它们。

<?php echo str_replace(array("\{\{client_name}}", "\{\{client_testing}}"), array('client_company_name', 'test'), 'html_document'); ?>