我的网站上的搜索表单有几个无线电输入,供用户选择搜索查询应使用的源(除一个外,其他所有源都位于网站外部)。
我检索这些输入(搜索词和源as);
function search_redirect_form() {
if (is_search() && ! empty( $_GET[\'simple\'] ) ) {
if (isset($_GET[\'simple\']) && $_GET[\'simple\'] == \'dogpile\') {
$query = $_GET["s"];
wp_redirect(esc_url_raw(\'theurl1\'. $query));
exit();
}
if (isset($_GET[\'simple\']) && $_GET[\'simple\'] == \'askjeeves\') {
$query = sanitize_text_field($_GET["s"]);
wp_redirect(esc_url(\'url3\' . $query));
exit();
}
else {
$query = sanitize_text_field($_GET["s"]);
wp_redirect(esc_url($home_url . "?s=" . $query));
exit();
}
当用户输入特殊字符((撇号、和号))时,查询的剩余文本通常会被删除;例如:“地球风与火”最终只是“地球风”
从阅读the codex, 我认为esc\\u raw\\u url最适合使用;但这仍然会导致查询在其他搜索引擎上遭到破坏,即使用符号(&;)其中,查询的其余部分被截断。(“大地风与火”变为“大地风”)。
在这一点上,我有点奇怪,因为wp\\u redirect会进行额外的转义(通过wp_sanitize_redirect), 这可能是一个bug;但我仍然对php生疏,不确定。这也可能让人困惑,因为其他网站可能会以稍微不同的方式逃避/清理输入。
问题:
我应该在输入本身而不是URL上转义吗?)(在我的示例中围绕“s”变量)