str_replace 有特殊角色场景

str_replace with special character scenario

我有一个奇怪的情况,如果我使用以下代码,任何帮助将不胜感激,我正在尝试将 h1 标签放在标题上

$phrase  = "*title** Some text goes here.";
$target = ['*', '**'];
$replace   = ["<h1>", "</h1>"];

$newPhrase = str_replace($target, $replace, $phrase);

echo $newPhrase;

输出的HTML如下:

<h1>title</h1>
<h1></h1>
<h1> Some text goes here.</h1>

但如果我使用以下内容(与之前相同,但 * 替换为 1,** 替换为 2):

$phrase  = "1title2 Some text goes here.";
$target = ['1', '2'];
$replace   = ["<h1>", "</h1>"];

$newPhrase = str_replace($target, $replace, $phrase);

echo $newPhrase;

有效,我得到输出:

 <h1>title</h1>
 Some text goes here. (not as a H1 element)

有人可以解释一下吗?为什么要这样处理 * 字符?我可以解决这个问题以便使用它们吗?

谢谢

您的 ** 永远不会匹配,因为单个 * 匹配每一次出现。更改顺序,以便先替换双。

<?php
$phrase  = "*title** Some text goes here.";
$target = ['**', '*'];
$replace   = ["</h1>", "<h1>"];

$newPhrase = str_replace($target, $replace, $phrase);

echo $newPhrase;

https://3v4l.org/21HZv

如果您使用 111,您会看到相同的行为。另外,您发布的 HTML 不是 PHP 生成的内容,我认为您的浏览器会自动更正。