带有特殊字符场景的str_replace

时间:2018-05-18 12:38:02

标签: php special-characters str-replace

我有一个奇怪的场景,任何帮助都会非常感激,我试图在标题上放置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)

任何人都可以解释一下吗?为什么*字符以这种方式处理?我可以解决这个问题,以便我可以使用它们吗?

由于

1 个答案:

答案 0 :(得分:2)

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

<?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生成的,我认为您的浏览器会自动更正。