【问题标题】:How to match the character '&' and replace it in php如何匹配字符'&'并在php中替换它
【发布时间】:2009-07-31 23:27:31
【问题描述】:

我的主要问题是页面上出现了一些带有空格字符的输出,该空格字符写为“ ”。我想用空格替换它。我试过str_replace("&nbsp"," ",$mystr) 甚至preg_replace("/( )/", " ", $mystr) 但无济于事。我该怎么做呢?更一般地说,如果有其他 html 代码作为输出,比如"&",有没有办法用实际的字符输出而不是 html 代码替换它们?

编辑:让我在这里澄清一些事情:我不希望人们在可编辑页面的源代码中输入“”标签。为了防止这种情况,我们需要一些机制来转义特殊字符。但问题是一些有效字符也被转义了。我想摆脱它们,但也想确保没有安全性被破坏。

【问题讨论】:

  • 当你说“在页面上出现一个空格字符写为" "”时,你是指在源代码中还是在浏览器中?如果您的意思是在源中,那么我的回答不是很好。如果你的意思是在浏览器中,我想我的答案就是你要找的。​​span>
  • 您可能想要替换 ' ',而不仅仅是 '&nbsp'。
  • @Kuroki,您可能想尝试在代码周围使用反引号 (`)。

标签: php html regex


【解决方案1】:

你只是这样做吗?

str_replace("&nbsp", " ", $mystr);

或者你这样做?

$mystr = str_replace("&nbsp", " ", $mystr);

str_replacepreg_replace 都返回一个值,它们不会就地更改字符串。

【讨论】:

  • 不,我正在按照您打印的方式进行操作,即收集作为输出返回的内容。
【解决方案2】:

我想你正在寻找html_entity_decode

【讨论】:

  • 这会将它变成一个不间断的空格字符,而不是空格。
  • 我在某种程度上正在寻找它,但我只是担心某些函数实际上会在返回输出之前为我调用 htmlentities()。在字符串上运行 html_entity_decode 不是安全问题吗?但我也有兴趣通过一些正则表达式匹配来做到这一点。
  • -1 它会转换任何字符引用,而不仅仅是 
  • @Gumbo - 只需重新阅读问题,我仍然认为(至少是原始问题)这就是 OP 所要求的。也许我很厚。
【解决方案3】:

看看html_entity_decode函数。

【讨论】:

  • 这会将它变成一个不间断的空格字符,而不是空格。
  • 你可以遍历字符串,然后用 U+0020 替换 U+00A0。
  • 这是第二个问题的答案,关于其他实体 :)
  • -1 它会转换任何字符引用,而不仅仅是 
【解决方案4】:

str_replace 应该替换文本的那部分,因为它不考虑正则表达式,所以我猜还有一些其他问题

【讨论】:

    【解决方案5】:
    <?php
       $string = "<p>Hello,& n b s p ;world</p>"; # Remove the spaces here - Stackoverflow bug doesn't let me enter the normal string.
       $string = str_replace("& n b s p ;", " ", $string);
       print $string;
    ?>
    

    这对我有用。也许您希望它在原地修改字符串而不是返回修改后的版本?

    【讨论】:

    【解决方案6】:

    我相信您正在寻找的功能是http://us2.php.net/manual/en/function.urldecode.php urldecode

    【讨论】:

    • 字符串是用 HTML 实体编码的,而不是 URL 编码。他要的是一个空间,而不是非破坏空间实体的解码版本。
    【解决方案7】:

    你真正需要的是一个基于适当的 HTML 解析器的 HTML 过滤器,这样你就可以让你的脚本只传递指定的 HTML 片段。

    【讨论】:

      【解决方案8】:

      看看HTML Purifier。给它一个允许的标签/属性的白名单,它会为你过滤一切。

      【讨论】:

        【解决方案9】:

        由于结尾的分号可能被省略,您可能需要考虑使用正则表达式:

        preg_replace("/&nbsp[;]?/", " ", $str)
        

        您可以将[;]? 替换为;?。但是 Stack Overflow 似乎取代了&amp;nbsp‍;(这是用零宽度连接器 U+200D 编写的)所以我使用了[;]?

        【讨论】:

          【解决方案10】:

          你试过了吗:

          $text=html_entity_decode(str_replace('& nbsp;',' ',$text));
          

          [去掉 & 和 nbsp 之间的空格:这是由于 Stack Overflow 的格式设置]

          它将用正常空格交换无中断空格,然后解码任何其他剩余的 html 实体。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多