Замена обратной косой черты другим символом в PHP
Вопрос
Испытывал трудности с заменой обратной косой черты другим символом, таким как '.-.', просто чтобы указать положение обратных косых черт, поскольку я не мог отправить строку, такую как '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
является шаблоном).Но, опять же, вам не нужно использовать регулярные выражения или беспокоиться о них