eregi_replace ("", '', $ data) – что делает эта строка?

В последнем примере файла примера 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'); 

Этот код удаляет все обратные косые черты из $body .

Хотя на первый взгляд это может выглядеть немного странно, регулярное выражение является правильным. Обратная косая черта не является метасимволом, когда она находится внутри скобок в регулярном выражении POSIX.

Тем не менее, есть все проблемы с этим кодом, тем более, что это должен быть пример:

  • Он использует одно из устаревших семейств регулярных выражений ereg (или POSIX). Половина последних примеров PHP в значительной степени должны использовать вместо этого preg (Perl-совместимое) семейство.
  • Он использует нечувствительное к регистру сопоставление ( i в eregi ), даже если оно не соответствует никаким буквам, поэтому случай не имеет значения.
  • Самое главное, фактическая цель замены неясна. Я могу только догадываться, что это ошибочная попытка учета функции магических кавычек PHP, которая автоматически добавляет обратную косую черту во всевозможные вещи.

    Чтобы быть ясным, этот код не является правильным способом справиться с магическими кавычками, так как он удалит все обратные косые черты из $body , даже «реальных», присутствующих в исходном входе. Функция stripslashes() предназначена именно для этого stripslashes() использования. Или, поскольку этот пример касается чтения из файла, вы можете просто отключить магические кавычки .

Код удаляет все backslahses.

Просто попробуйте код на некотором примерном вводе .

Я не знаю, почему был выбран eregi , поскольку он и его братья устарели. Лучше использовать preg_replace() .

Обратите внимание, что eregi_replace() и preg_replace() имеют разные правила использования. Первый использует расширение PREIX regex, а позднее использует функции PCRE. Вот список различий , которые затрудняют понимание вашего кода, если вы предполагаете синтаксис 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 

Дальнейшее чтение .

Это "[\]" означает, что вы избегаете левого тега ]