多项替换使用 str_replace

144

我记得以前做过这个,但是找不到代码了。我使用 str_replace 替换一个字符,例如: str_replace(':', ' ', $string); 但我想要替换以下所有字符 \/:*?"<>|,而不用每次都进行一次 str_replace。


2
你想用空格替换所有这些字符吗? - Book Of Zeus
7
不要害怕参考优秀的php.net手册并查看params部分,以确定你想要的是否可行。 - Mike B
10个回答

239

像这样:

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

或者,在现代 PHP(从5.4版开始)中,稍微简化一些:

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

133

str_replace() 函数可以接受一个数组作为参数,所以您可以这样做:

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

或者你可以使用preg_replace()函数:

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

2
假设 OP 的意思是反斜杠应该被替换,那么 preg_replace 模式对我来说不起作用。为了让反斜杠按预期工作,我必须在模式中使用 4 个反斜杠(即 "\\")。 - GreenMatt
1
好的回答,加上@dogbert的回答,对于那些不阅读手册并且没有意识到str_split返回一个数组的人来说,这将使其完整。 - Bradmage
在 OP 的情况下,str_replace()preg_replace() 之间有什么优势呢? - aronmoshe_m
1
@ludditedev 没有真正的优势,只是个人偏好的问题。 - NullUserException
@NullUserException 假设我想删除所有这些字符:+-><。根据您的答案,我尝试了:preg_replace('〜[\\ + - > <]〜','',$s);。但它也删除了数字(0-9)。错在哪里?演示请见:https://3v4l.org/inS5W - Madhur Bhaiya
1
@MadhurBhaiya 将正则表达式更改为'~[\\+><-]~'(请注意 - 的位置)。破折号(-)是一个正则表达式元字符,因此需要转义或在字符类中放置。请参见此答案:https://dev59.com/YWsz5IYBdhLWcg3w3r0J#7604888 - NullUserException

100
例如,如果您想将search1替换为replace1并将search2替换为replace2,则以下代码将起作用:
print str_replace(
    array("search1","search2"),
    array("replace1", "replace2"),
    "search1 search2"
);

// 输出:替换1 替换2


54
str_replace(
    array("search","items"),
    array("replace", "items"),
    $string
);

6

如果你只需要替换单个字符,建议使用strtr()函数。


3
只能用单个汉字吗?为什么? - Jimmy Kane

3
你可以使用preg_replace()。以下示例可在命令行php中运行:
<?php
$s1 = "the string \\/:*?\"<>|";
$s2 = preg_replace("^[\\\\/:\*\?\"<>\|]^", " ", $s1) ;
echo "\n\$s2: \"" . $s2 . "\"\n";
?>

输出:

输出:

$s2:“the string          ”


字符类内有太多的转义。 (请参见被接受的答案) - mickmackusa

1
我曾遇到这样的情况,需要用两种不同的替换结果替换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;

结果

"洒水器和消防安装人员","蒸汽安装工","水磨石、瓷砖和大理石铺设人员"


0

我猜你在寻找这个:

// 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);
}

0
在我的使用情况中,我把HTML文档中的一些字段参数化,在加载这些字段后,我使用str_replace方法进行匹配和替换。
<?php echo str_replace(array("{{client_name}}", "{{client_testing}}"), array('client_company_name', 'test'), 'html_document'); ?>

0

preg_replace() 对于多个项目来说是最好的。请检查:

$invoice_no = preg_replace('~[\\+:><-]~', "",rand(0, 10) . now());

对于单个替换,您可以使用str_replace()函数:
$invoice_no = str_replace("-", "",rand(0, 1000) . now());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接