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 が必要です。