Замена обратной косой черты другим символом в PHP

StackOverflow https://stackoverflow.com/questions/2482637

Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

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

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

Редактировать:

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

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

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

Другие советы

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

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

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


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

Кстати, если бы я мог отправить полный массив через 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)

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top