Php eregi#u replace(“[\]”,';';';,$data)--此行的作用是什么?
在最新的phpmailer示例文件中,有以下行:Php eregi#u replace(“[\]”,';';';,$data)--此行的作用是什么?,php,regex,Php,Regex,在最新的phpmailer示例文件中,有以下行: $body = eregi_replace("[\]",'',$body); 由于我对正则表达式不是很在行,所以我无法理解上面的内容是什么,以及在编写自己的数据块($body)时是否需要使用它。有人能帮我弄清楚吗 编辑 我真的复制得很好。以下是原始phpmailer示例文件中的一整段代码,完全没有涉及: require_once('../class.phpmailer.php'); $mail = new PHPMai
$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');
此
“[\]”
表示您正在转义指向左侧的标记]
。该代码正在删除$body
中的所有反斜杠
虽然乍一看可能有点奇怪,但正则表达式是正确的。当反斜杠位于POSIX正则表达式的括号内时,它不是元字符
尽管如此,这段代码还是有各种各样的问题,特别是因为它应该是一个示例:
- 它使用一个不推荐使用的regex函数族
(或POSIX)。最近一半的PHP示例应该都使用ereg
(Perl兼容)系列preg
- 它使用不区分大小写的匹配(在
中的eregi
),尽管它不匹配任何字母,因此大小写是无关的i
- 最重要的是,更换的实际目的尚不清楚。我只能猜测,这是一种误导性的尝试,试图解释PHP的特性,该特性会自动在各种事情上添加反斜杠
要明确的是,此代码不是处理神奇引号的正确方法,因为它将删除
中的所有反斜杠,甚至是原始输入中的“真实”反斜杠。该功能正是针对这个用例设计的。或者,由于本例处理的是从文件中读取,因此您可以简单地执行以下操作$body
eregi
,因为它和它的兄弟已经被弃用了。最好使用
请注意,eregi_replace()
和preg_replace()
有不同的使用规则。前者使用POSIX正则表达式扩展,而后者使用PCRE函数。下面是一个例子,如果假设preg\u 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
.是的,直接从他们的文件中复制,根本没有触及它。@mario:没有,因为反斜杠在]@genesis-φ:
eregi
使用POSIX正则表达式语法,这恰好允许这种边缘大小写。你的回答没有意义。那么左括号呢?是不是也需要转义呢?我是这样的,括号是相框的。