在最新的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');
答案 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
答案 2 :(得分:-1)
此"[\]"
表示您正在转义左侧标记]
...