Страницы

Поиск по вопросам

четверг, 28 февраля 2019 г.

Какую функцию использовать для подстановки значений в строку запроса?

Как сделать тоже самое на PHP?
`API_URL = "https://api.similarweb.com/v1/website/{site}/" \ "total-traffic-and-engagement/visits?api_key={api_key}" \ "&start_date={start_date}" \ "&end_date={end_date}" \ "&main_domain_only=false" \ "&granularity={granularity}".format( site='cnn.com', api_key=MY_API_KEY, start_date="2017-09", end_date="2017-10", granularity="monthly" )`


Ответ

Ну, как вариант с помощью eval
$string = 'API_URL = "https://api.similarweb.com/v1/website/{site}/" \ "total-traffic-and-engagement/visits?api_key={api_key}" \ "&start_date={start_date}" \ "&end_date={end_date}" \ "&main_domain_only=false" \ "&granularity={granularity}".format( site="cnn.com", api_key=MY_API_KEY, start_date="2017-09", end_date="2017-10", granularity="monthly" )';
$site = 'test.ru'; $api_key = 'superkey';
$start_date = 'ONE'; $end_date = 'TWO';
$granularity = 'variable';
preg_match_all('#\{(.*?)\}#', $string, $matches, PREG_SET_ORDER);
foreach ($matches as $m) { eval('$string = str_replace($m[0], $'.$m[1].', $string);'); }
echo $string;
В результате данные в формате {параметр} заменяются на значение переменной $параметр
В итоге получаем такую строку:
API_URL = "https://api.similarweb.com/v1/website/test.ru/" \ "total-traffic-and-engagement/visits?api_key=superkey" \ "&start_date=ONE" \ "&end_date=TWO" \ "&main_domain_only=false" \ "&granularity=variable".format( site="cnn.com", api_key=MY_API_KEY, start_date="2017-09", end_date="2017-10", granularity="monthly" )
UPD: Решение чуть попроще:
$string = str_replace('"', '\"', preg_replace('#\{(.*?)\}#i', '\$$1', $string)); eval('$string = "'.$string.'";');
echo $string;
Или вместо функции str_replace возьмем addcslashes для экранирования кавычек:
eval('$string = "'.addcslashes(preg_replace('~\{(.*?)\}~i', '\$$1', $string), '"').'";');
echo $string;

Комментариев нет:

Отправить комментарий