странное уведомление о регулярном выражении php

Я пытаюсь написать функцию для преобразования плохих имен файлов в правильные имена файлов. Я попытался сделать это с помощью регулярного выражения, которое работает хорошо, но выдает уведомление каждый раз, когда пытается исправить имя. Это мой код:

private function clean_filename($filename) {
    $reserved = preg_quote('\/:*?"<>|', '/');
    $filename = preg_replace("/([\\x00-\\x20\\x7f-\\xff" .$reserved . "])/e", "_", $filename);
    return $filename;
}

Уведомление:

Примечание: использование неопределенной константы _ - предполагается '_' в C:\Documents and Settings\A administrator\Desktop\script\script.php(89): код регулярного выражения в строке 1

В чем может быть проблема? Заранее спасибо!!


person user1004012    schedule 06.12.2011    source источник


Ответы (1)


Использование e вызывает оценку как выражение PHP. Итак, вы должны использовать:

$filename = preg_replace("/([\\x00-\\x20\\x7f-\\xff" .$reserved . "])/e",
    "'_'", $filename); //or "\"_\""; or '"_"' etc.

Еще лучше было бы отказаться от флага e, поскольку он вам не нужен (ваше выражение замены фиксировано; это всегда символ подчеркивания).

$filename = preg_replace("/([\\x00-\\x20\\x7f-\\xff" .$reserved . "])/",
    "_", $filename);
person Artefacto    schedule 06.12.2011