Замена обратной косой черты на другой символ в PHP - PullRequest
3 голосов
/ 20 марта 2010

Пытался заменить обратную косую черту другим символом, таким как «.-.» просто чтобы указать положение обратной косой черты, так как я не мог отправить строку, такую ​​как 'C \ xampp \ etc.' через url в качестве переменной GET, поэтому я подумал, что сначала я должен заменить обратные слэши в этой строке другим символом, затем отправить через URL, а затем заменить их обратно на обратные слэши в файле PHP, который их обрабатывает. Хотя есть ли лучший способ отправить такие строки через URL? Потому что, когда я пытаюсь сценарий, такой как:

$tmp_name = preg_replace("\", ".-.", $_FILES['uploadfile']['tmp_name']);

Получается ошибка php, так как \ также используется в качестве разделителя.

Может ли кто-нибудь помочь мне в этом?

Заранее спасибо!

Кстати, если бы я мог отправить полный массив через URL, вся эта проблема была бы решена, но я не думаю, что это возможно?

Ответы [ 4 ]

4 голосов
/ 20 марта 2010

Регулярное выражение, используемое в preg_replace, должно быть заключено в пару разделителей, а также попробуйте использовать \\\ вместо \ как:

$tmp_name = preg_replace("{\\\}", ".-.", $_FILES['uploadfile']['tmp_name']);

EDIT:

Чтобы отменить замену, вы можете сделать:

$str = preg_replace('{\.-\.}',"\\",$str);

Вам нужно выйти из ., чтобы соответствовать буквальной точке.

3 голосов
/ 20 марта 2010

использование urlencode() / urldecode().

echo urlencode('C:\xampp\etc'); // C%3A%5Cxampp%5Cetc

Кстати: это звучит как огромный недостаток безопасности (отправка абсолютных путей по запросу)


PS: preg_replace() для регулярных выражений. Попробуйте str_replace() в следующий раз.

1 голос
/ 20 марта 2010

Кстати, если бы я мог отправить полный массив через URL, вся эта проблема была бы решена, но я не думаю, что это возможно?

Это просто. PHP:

$url = 'http://example.com/?array=' . urlencode(serialize($array)); // html
$array = unserialize($_GET['array']); // server side

Или Javascript:

url = "http://example.com/?array=" + encodeURIComponent(JSON.stringify(array)); // client
$array = json_decode($_GET['array']); // server

(для Javascript вам нужно проверить правильность encodeURIComponent, а также вам нужна официальная библиотека JSON)

0 голосов
/ 20 марта 2010

Если вы не используете регулярное выражение (которым вы не являетесь), вы должны использовать str_replace вместо:

$tmp_name = str_replace('\\', '.-.', $_FILES['...']);

Обратите внимание, что вы должны экранировать \ с другим \ (в противном случае это будет экранирование следующих ').

Что касается ошибки разделителя - регулярные выражения должны быть заключены в разделители, например /foo/ (/ - разделитель, foo - шаблон). Но, опять же, вам не нужно использовать или беспокоиться о регулярных выражениях

...