2015-03-19 3 views
1

Я работаю с подачей SOAP в тот момент, когда требуется прохождение некоторых специальных переменных (вытащил из другого сырья)сохранить символ «+» в URL переменной

например.

+blPsNeYyjvRQhCiHQEISg== 

Это абсолютно необходимо, чтобы переменная была размещена так, как есть, но когда я делает его в PHP скрипт .. это обрабатывать + символ как + действия и обнажая его и пытается выполнить расчет

Так что, если бы у меня было blPsNeYyj+vRQhCiHQEISg==, строка была отправлена ​​как blPsNeYyj + vRQhCiHQEISg и вызывает ошибки.

Если я заменяю +%2b, он работает, поэтому я попробовал URL-кодирование, и он все равно не работает. Это происходит потому, что == в конце должен остаться ==

Таким образом, в итоге мне нужны все экземпляры + заменены %2b

Я пытался

$service = preg_replace("/\+/","%2B",$service); 

, но это также не удается, и просто возвращает NULL

ОТВЕТ:

Хранится это си mple, чтобы проиллюстрировать этот процесс, но, чтобы получить корм, чтобы работать должным образом, я должен был использовать очень причудливый процесс

$service = (urlencode($_REQUEST['service'])); 

$service = substr($service,0,-6); 

$service = $service.'=='; 

закодировать его, чтобы сохранить + но затем преобразуется в «=» в% 3d которая остановила подачу SOAP за работой.

Удалить% 3d% 3d

Readd два '==' и представить

и это работает ...

Go рисунок ..

+0

Попробуйте 'preg_replace ('/ \ + /', ...); '. Символ «плюс» является квантором в регулярных выражениях. – Lumen

+0

Я исправил свой пост, попробуйте ('/ \\ + /'); –

+0

Существует различие между одинарными кавычками и двойными кавычками. Если вы используете двойные кавычки, вам также необходимо избегать обратной косой черты: ''/\\ +/"' или ''/\ +/''. – Lumen

ответ

2

Вам нужно UrlEncode() это:

$service = urlencode($service); 

Создайте свой URL

$url = "http://.....?service=".$service; 

и при получении его:

$service = urldecode($_GET['service']); 
+0

Я использовал части этого, чтобы получить ответ – MOLEDesign

1

Ваше регулярное выражение было почти правильно

Это происходит потому, что символ + используется как выражение/квантора в приведенном выше регулярном выражении, так что вы должны избежать его с помощью обратной косой черты \

Это работает мой сервер

<?php 

$sub = '+blPsNeYyjvRQhCiHQEISg=='; 

echo preg_replace('/\\+/', '%2b', $sub); 

вывода

%2bblPsNeYyjvRQhCiHQEISg== 
+0

OP отредактировал это сообщение, и теперь он показывает скрытый шаблон – treegarden

+0

Я внесла поправки в свой пост - я сам опробовал это, вы также можете проверить здесь https://www.functions-online.com/preg_replace. html с шаблоном/\ + /, заменой x, subject y ... –

+0

Вы можете использовать одиночную обратную косую черту в своем регулярном выражении, как в ''/\ +/'', см. [Руководство по PHP для строк] (http://php.net/manual/en/language.types.string.php#language.types.string.syntax.single). – Lumen

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