Сохранить символ «+» в переменной URL

Сейчас я работаю с SOAP-фидом, который требует передачи некоторых специальных переменных (извлеченных из другого фида)

например.

+blPsNeYyjvRQhCiHQEISg==

Крайне важно, чтобы переменная была размещена точно так, как есть, но когда я рендерил ее в сценарии PHP … она обрабатывает + символ как + действие и зачистки и пытается выполнить расчет

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

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

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

я пытался

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

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

ОТВЕТ :

Упрощенно проиллюстрировать процесс, но чтобы заставить канал работать правильно, мне пришлось использовать очень странный процесс

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

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

$service = $service.'==';

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

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

Прочитайте два ‘==’ и отправьте

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

Пойди разберись ..

1

Решение

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

$service = urlencode($service);

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

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

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

$service = urldecode($_GET['service']);
2

Другие решения

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

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

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

<?php

$sub = '+blPsNeYyjvRQhCiHQEISg==';

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

Выведение

%2bblPsNeYyjvRQhCiHQEISg==
1

По вопросам рекламы [email protected]