在 PHP 中构建 URL 的准备语句

Prepared statements for building a URL in PHP

构建 URL 时,您可以使用 urldecode 和 urlencode 来转义特定字符串,但我正在尝试构建以下形式的字符串:

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

等等。我的应用程序中有很多这样的 "URL building" 语句,我不想​​记住对每个 URL.[=15 中的每个变量进行 urlencode =]

在 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 来构建这样的字符串,但它们不会被转义 属性。我也可以对整个 $url 变量使用 urlencode,但是这样会丢失我想保留的斜杠。

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 参数,您甚至可以选择要使用的 urlencoding 类型。如果您想要它的方式与 urlencode() 相同,则 select PHP_QUERY_RFC3986 用于 $enctype。 (这不是默认值)。