При создании 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, но это теряет косые черты, которые я хочу сохранить.
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
, (Это не по умолчанию).
Других решений пока нет …