PHP str_replace/preg_replace 与 php 打开标签的问题
-
28-09-2019 - |
题
我正在尝试替换类似的东西:
$text = "Hello <--name--> !!";
echo str_replace("--","?",$text);
预期的:
Hello <?name?> !!
结果:
Hello !!
(我正在检查源代码,并且启用了短开放标签)
我尝试了很多方法,但似乎永远无法得到任何结果 <?
(或者 <?php
) 细绳。我认为这可能与Ubuntu默认启用的Suhosin补丁有关。在做其他事情之前,有人知道如何让它发挥作用吗?
谢谢。
更新:
我直接在命令行中尝试并且有效。是的,问题是 php 标签之间的任何内容都不会显示在浏览器(Chrome)中,甚至在源代码中也不会显示。
echo "A <"."?"."php"." echo 1 "." ?".">"." B";
在 Chrome 中查看源代码时会显示“A B”。但 Firefox 显示完整...总而言之,Chrome 欺骗了我;)
谢谢你!!!
抱歉,我必须选择最佳答案...但对我来说,第 3 个答案是正确的。
解决方案
您是否真的看过浏览器的源视图? <? ?>
部分往往被解释为标签。
如果您不使用 eval()
在任何地方,这些标签都不会由PHP真正解释。
也许Suhosin会过滤出来,但这会让我感到惊讶。您可能可以通过使用
< >
反而。
其他提示
这与Suhosin无关。
<?name?> !!
当在HTML页面中显示时会导致 !!
检查页面源。
我同意 Pekka 和 Mike(另一个 Mike,不是我 Mike)的观点 - 你确实需要检查 HTML 源代码,因为它会正确显示。如果您确实想在输出中看到小于和大于符号,则需要将它们替换为 HTML 实体(如 Pekka 的建议):
$search = array('<', '>', '--');
$replace = array('<', '>', '?');
$text = 'Hello <--name--> !!';
echo str_replace($search,$replace,$text);
您也可以使用htmlspecialchars,这样:
$text = htmlspecialchars("Hello <--name--> !!");
echo str_replace("--","?",$text); // Hello <?name?> !!
htmlspecialchars将替换:
- & 和 &
- “ 和 ”
- <with <
与>
如果您不想替换“出于某种原因或另一个原因,则可能(请参阅 http://se2.php.net/manual/en/function.htmlspecialchars.php)。 &,<和>,据我所知, &
, <
和 >
当您使用htmlspecialchars时。