php正则表达式...奇怪的行为

时间:2010-10-07 08:38:21

标签: php regex

这个表达有什么问题?

echo preg_replace("/Condizioni/","ciao","<tr bla vla Condizioni");

它没有返回任何东西......

无论如何,当我删除“&lt;”时它会起作用char ...但我不明白为什么......这是一个特殊的字符,如果是这样的话,我必须按照字面意思来匹配它。

谢谢...

3 个答案:

答案 0 :(得分:2)

它可以按您的需要工作(code on ideone)。唯一的问题是网页中的echo "<tr bla vla ciao";会导致麻烦。你必须逃避你的HTML字符。

htmlspecialchars()会为您做到这一点:

echo htmlspecialchars(preg_replace("/Condizioni/","ciao","<tr bla vla Condizioni"));

它将回显&lt;tr bla vla ciao

答案 1 :(得分:1)

你是什么意思“回归”?

$ php --version
PHP 5.3.2 (cli) (built: Aug  7 2010 00:04:41) 
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
$ cat test.php 
#!/usr/bin/env php
<?
echo preg_replace("/Condizioni/","ciao","<tr bla vla Condizioni");
?>
$ ./test.php 
<tr bla vla ciao

这看起来是正确的。

你在期待什么?

答案 2 :(得分:0)

正则表达式没有错;只是带有<符号的文本无法正常显示,因为浏览器认为您已打开HTML标记。

您可以通过在浏览器上执行“查看源”来证明这一点;您应该按预期看到文本。

您需要做的是在输出文本之前对完成的文本执行htmlentities(),以便将<字符转义为浏览器可以显示的实体值。