如何拼接搜索查询词与预设文本生成正确的Bing站点搜索URL
解决方案
你现有代码的问题是给两个输入框都设置了name属性,GET 方式提交表单时,所有带name的输入框内容都会作为独立的查询参数拼接,所以才会出现&q1=的多余参数。可以通过 JavaScript 监听表单提交事件,在提交前合并查询条件,以下是可直接运行的修改方案:
最简实现(内联事件)
<form method="get" action="https://www.bing.com/search" onsubmit="mergeQuery(this)"> <input type="text" name="q" size="25" maxlength="255" value="Hakunamatata" /> <input type="hidden" name="q1" value="site:www.imdb.com/title" /> <input type="submit" value="Bing Search" /> </form> <script> function mergeQuery(form) { // 拼接两个查询条件,中间加空格即可,浏览器会自动将空格编码为+号 form.q.value = form.q1.value.trim() + ' ' + form.q.value.trim(); // 禁用多余的输入框,提交时不会生成额外参数 form.q1.disabled = true; } </script>
规范实现(事件监听,无内联JS)
<form id="bingSearchForm" method="get" action="https://www.bing.com/search"> <input type="text" name="q" size="25" maxlength="255" value="Hakunamatata" /> <!-- 去掉name属性,默认就不会被表单提交 --> <input type="hidden" id="siteRule" value="site:www.imdb.com/title" /> <input type="submit" value="Bing Search" /> </form> <script> const searchForm = document.getElementById('bingSearchForm'); searchForm.addEventListener('submit', function() { const qInput = this.querySelector('input[name="q"]'); const siteRule = document.getElementById('siteRule').value.trim(); qInput.value = siteRule + ' ' + qInput.value.trim(); }); </script>
注意事项
- 拼接查询条件时中间加普通空格即可,浏览器提交GET表单时会自动将空格编码为
+,和你需要的目标URL格式完全一致 - 建议将表单
action属性的http改为https,避免 Bing 强制跳转导致参数丢失 - 如果不需要动态修改站点筛选规则,也可以直接把
site:前缀硬编码到拼接逻辑里,不需要额外的隐藏域
内容的提问来源于stack exchange,提问作者SuperMar1o
相关产品推荐
相关产品推荐

