Подготовленные операторы для построения URL в переполнении стека

При создании URL вы можете использовать urldecode и urlencode для экранирования определенных строк, но я пытаюсь создать строки в форме:

$url = "/myobject/id=$id/property=$property"

и так далее. У меня есть довольно много таких операторов «построения URL» в моем приложении, и я не хочу помнить, чтобы urlencode помещался вокруг каждой переменной в каждом URL.

В PHP (и других языках) вы можете безопасно построить SQL-запрос, используя подготовленный оператор. Например:

$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);

Цель здесь — избежать любых неприятных символов в $ firstname, $ lastname или $ email.

Мне интересно, есть ли способ сделать что-то подобное. Код, который я ищу, выглядит примерно так:

$url = safe_build_url("/myobject/id=?/property=?", $id, $property)

Я мог бы использовать printf для создания таких строк, но они не являются экранированными. Я мог бы также использовать urlencode для всей переменной $ url, но это теряет косые черты, которые я хочу сохранить.

1

Решение

PHP имеет http_build_query() для этого:

$data = array('foo'=>'bar',
'baz'=>'boom',
'php'=>'hypertext processor');

echo http_build_query($data); // foo=bar&baz=boom&php=hypertext+processor

С использованием $encType Param вы можете даже выбрать тип urlencoding для использования. Если вы хотите это так же, как urlencode() затем выберите PHP_QUERY_RFC3986 для $enctype, (Это не по умолчанию).

1

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

Других решений пока нет …

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