2010-03-20 4 views
3

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

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

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

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

Заранее благодарен!

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

ответ

4

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

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

EDIT:

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

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

Вам необходимо избегать ., чтобы соответствовать буквальная точка.

+0

Awesome! Это полностью решило мою проблему, спасибо большое! – Skyfe

+0

Обновление: как бы это изменить? – Skyfe

+0

@Skyfe: Обновлен ответ. – codaddict

3

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

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

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


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

+0

+1 Правильный ответ, ИМХО. –

0

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

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

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

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

1

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

Смежные вопросы