如何匹配角色'&'并在PHP中替换它

时间:2009-07-31 11:59:11

标签: php html regex

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

编辑:我在这里澄清一些事情:我不希望人们在可编辑页面的源代码中输入“< s c r i t t>”标签。为了防止这种情况,我们需要一些机制来转义特殊字符。但问题是一些有效的字符也被转义。我想要揭穿它们,但也想确保没有违反安全措施。

10 个答案:

答案 0 :(得分:4)

你刚才这样做吗?

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

或者你这样做?

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

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

答案 1 :(得分:2)

我认为你正在寻找html_entity_decode

答案 2 :(得分:2)

查看html_entity_decode功能。

答案 3 :(得分:1)

str_replace应该替换文本的那部分,因为它不会占用帐户中的正则表达式,所以我猜其他问题

答案 4 :(得分:1)

<?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;
?>

这对我有用。也许你期望它修改字符串而不是返回修改后的版本?

答案 5 :(得分:0)

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

答案 6 :(得分:0)

你试过了吗?

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

[删除&符号之间的空格:这是由于Stack Overflow的格式化]

它会将无破坏空格与普通空格交换,然后解码任何其他剩余的html实体。

答案 7 :(得分:0)

您实际需要的是基于正确的HTML解析器的HTML过滤器,因此您只能通过脚本传递指定的HTML部分。

答案 8 :(得分:0)

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

答案 9 :(得分:0)

由于可能会出现尾随分号,因此您可能需要考虑使用正则表达式:

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

您可以[;]?替换;?。但Stack Overflow似乎取代&nbsp‍;(这是用ZERO WIDTH JOINER U + 200D编写的)所以我使用了[;]?