Борьба с заменой обратной косой черты другим символом, таким как «.-». просто чтобы указать положение обратных косых черт, поскольку я не мог отправить строку, такую как 'C \ xampp \ etc.' через url как переменную GET, поэтому я решил сначала заменить обратную косую черту в этой строке другим символом, затем отправить URL-адрес, а затем заменить их обратно на обратные косые черты в файле PHP, который его обрабатывает. Хотя был бы лучший способ отправить такие строки через url? Потому что, когда я пробую сценарий, такой как:
$tmp_name = preg_replace("\", ".-.", $_FILES['uploadfile']['tmp_name']);
Он превращается в php-ошибку, так как \ используется как разделитель.
Может ли кто-нибудь помочь мне в этом?
Заранее спасибо!
Кстати, если бы я смог отправить полный массив по URL-адресу, вся эта проблема была бы решена, но я не думаю, что это возможно?
Регулярное выражение, используемое в preg_replace, должно быть заключено в пару разделителя, а также Попробуйте использовать \\\
вместо \
as:
$tmp_name = preg_replace("{\\\}", ".-.", $_FILES['uploadfile']['tmp_name']);
РЕДАКТИРОВАТЬ:
Чтобы отменить замену, вы можете:
$str = preg_replace('{\.-\.}',"\\",$str);
Вам нужно бежать .
чтобы соответствовать буквальной точке.
используйте urlencode()
/ urldecode()
.
echo urlencode('C:\xampp\etc'); // C%3A%5Cxampp%5Cetc
BTW: Это звучит как огромный недостаток безопасности (отправка абсолютных путей по запросу)
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
– шаблон). Но, опять же, вам не нужно использовать или беспокоиться о регулярных выражениях