PHP使用str_replace-意外删除/使用preg_replace

时间:2019-02-05 19:09:02

标签: php regex

有点问题。我正在编写一个简单的函数来摆脱以下符号:<> [] {}。它只是从输入中删除它。

So I have:
$find = array("&lt;", "&gt;", "[", "]", "{", "}"); 
$replace = array("");
$cleanDetails = str_replace($find,$replace,$temporaryDetails);

问题是,例如,如果我写:

Oh! This is a <?php sample text ?>

它将消除从<直到>的所有内容!结果变为:

  

Oh! This is a

所以(我不理解preg_replace更好),我想到了:

$cleanDetails = preg_replace("/[\[<{}>\]]*/","",$temporaryDetails);

它不会替换单个<,> {,},[或],但是会删除对! 加!我该怎么做?

1 个答案:

答案 0 :(得分:0)

发生了什么事?

  

它将消除从<直到>包括在内的所有内容!

不,情况更糟:它不会消毒任何东西。您看不到<?php ...?>,因为PHP标记在HTML文件中无效,因此浏览器会自动将其转换为注释,因为它不知道该怎么做,请查看页面源代码:

您是否尝试过使用其他字符串,例如"Oh! This is a <b>sample text </b>"?我确定您会看到它粗体

这是您在php shell中的代码:

$ php -a
Interactive shell

php > $find = array("&lt;", "&gt;", "[", "]", "{", "}"); 
php > $replace = array("");
php > $temporaryDetails = 'Oh! This is a <?php sample text ?>';
php > $cleanDetails = str_replace($find, $replace, $temporaryDetails);
php > echo $cleanDetails;
Oh! This is a <?php sample text ?>

为什么会这样?

str_replace坏了吗?不,它确实在执行您要执行的操作:替换

  • &lt;
  • &gt;
  • [
  • ]
  • {
  • }

带有空字符串。

问题很简单:"<?php sample text ?>"中没有一个,因为"&lt;""<" 不相同。第一个是四个字符的字符串,第二个是一个单字符的字符串。

看看这个:

php > $temporaryDetails = 'Oh! This is a &lt;?php sample text ?&gt;';
php > $cleanDetails = str_replace($find, $replace, $temporaryDetails);
php > echo $cleanDetails;
Oh! This is a ?php sample text ?

可行的解决方案

您想要的可能是:

$find = array("<", ">", "[", "]", "{", "}");
$replace = "";