eregi_replace(“[\]”,'',$ data) - 这行是做什么的?

时间:2011-10-09 22:16:14

标签: php regex

在最新的phpmailer示例文件中,有以下行:

$body = eregi_replace("[\]",'',$body);

由于我在正则表达式方面不是很好,我无法弄清楚上面做了什么以及在编写自己的数据块($body)时是否需要使用它。谁能帮我解决这个问题呢?

修改

我真的把它复制好了。这是原始phpmailer示例文件中的一大块代码,完全不受影响:

require_once('../class.phpmailer.php');

$mail             = new PHPMailer(); // defaults to using php "mail()"

$body             = file_get_contents('contents.html');
$body             = eregi_replace("[\]",'',$body);

$mail->AddReplyTo("name@yourdomain.com","First Last");

$mail->SetFrom('name@yourdomain.com', 'First Last');

3 个答案:

答案 0 :(得分:7)

该代码正在从$body删除所有反斜杠。

虽然乍一看看起来有些奇怪,但正则表达式 是正确的。当反斜杠位于POSIX正则表达式的括号内时,反斜杠不是元字符。

无论如何,这段代码存在各种各样的问题,特别是因为它应该是一个例子:

  • 它使用了一个已弃用的ereg(或POSIX)正则表达式函数系列。最近的一半PHP示例应该使用preg(Perl兼容)系列。
  • 它使用不区分大小写的匹配(i中的eregi),即使它与任何字母都不匹配,所以大小写无关紧要。
  • 最重要的是,更换的实际目的尚不清楚。我只能猜测,这是一个误导性的尝试,以解释PHP的magic quotes功能,该功能会自动为各种事物添加反斜杠。

    要明确的是,此代码是处理魔术引号的正确方法,因为它会从$body删除所有反斜杠,甚至“真实” “原始输入中存在的那些。 stripslashes()函数仅适用于此用例。或者,由于该示例涉及从文件中读取,因此您只需turn off magic quotes

答案 1 :(得分:1)

该代码删除所有后退。

试用代码on some sample input

我不确定为什么eregi被选中,因为它及其兄弟已被弃用。最好使用preg_replace()

请注意,eregi_replace()preg_replace()具有不同的使用规则。第一个使用POSIX正则表达式扩展,而后者使用PCRE功能。这是一个list of the differences,如果您假设preg_replace()语法,则可以帮助您理解代码。

这些都做同样的事情:

eregi_replace("[\]",'',$body);  \\ Remove backslashes with POSIX regexes

preg_replace("[\\\]",'',$body);   \\ Remove backslashes with PCRE regexes
preg_replace("/[\\\]/",'',$body); \\ Ditto
preg_replace("/\\\/",'',$body);   \\ Ditto
preg_replace("*\\\*",'',$body);   \\ Ditto

Further reading

答案 2 :(得分:-1)

"[\]"表示您正在转义左侧标记] ...