Сейчас я работаю с 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
Прочитайте два ‘==’ и отправьте
и это работает …
Пойди разберись ..
Вам нужен urlencode () это:
$service = urlencode($service);
Создайте свой URL
$url = "http://.....?service=".$service;
и при получении:
$service = urldecode($_GET['service']);
Ваше регулярное выражение было почти правильным
Это происходит потому, что символ + используется в качестве выражения / квантификатора в приведенном выше регулярном выражении, поэтому вы должны экранировать его обратной косой чертой \
Это работает на моем сервере
<?php
$sub = '+blPsNeYyjvRQhCiHQEISg==';
echo preg_replace('/\\+/', '%2b', $sub);
Выведение
%2bblPsNeYyjvRQhCiHQEISg==