У меня странный сценарий, любая помощь будет очень признательна, я пытаюсь поместить теги 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;
Вы бы увидели такое же поведение, если бы использовали 1 и 11. Кроме того, опубликованный вами HTML - это не то, что генерирует PHP, я думаю, ваш браузер автоматически исправляет это.
Блестящее спасибо, это именно та проблема, у меня было ощущение, что браузер исправляет HTML. Еще раз спасибо