结合 Corbin 和 KoolKabin 的答案为您提供了这个易于阅读的片段:
printf('<a href="%s">%s</a>',
htmlspecialchars(
http_build_query(array(
'country' => $country,
'from_language' => $from_language,
'into_language' => $into_language,
'submitted' => 'true',
'page' => $x
))
),
htmlspecialchars($x));
参数化
printf和sprintf对于向字符串添加参数非常有用。它们使添加转义值或复杂值变得容易,而不会使字符串本身不可读。通过第一个参数,您总是可以一目了然地看到它是什么字符串。
http_build_query也是一种参数化的方式,但是是针对查询字符串的。主要用途是您根本不需要关注查询字符串的语法。
逃跑
htmlspecialchars确保数据适合插入 HTML 代码。这类似于在 SQL 查询中转义以避免 SQL 注入,只是这里我们要避免 HTML 注入(也称为 XSS 或跨站脚本)。
http_build_query 将自动确保所有值都被转义以作为 URL插入浏览器的地址字段中。这并不能保证适合插入HTML 代码。因此查询字符串也需要 htmlspecialchars !