You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP语言词典项目如何为词条生成可正常访问的SEO友好动态URL

问题解决方案

核心原因

修改a标签添加href属性后,点击链接会触发浏览器默认的页面跳转行为,绑定的AJAX请求虽然会执行,但页面跳转刷新会直接清空刚渲染的内容,所以才会出现结果闪一下就消失的情况。

具体修改步骤

  • 第一步:阻止a标签默认跳转行为,同时点击后更新地址栏URL(不刷新页面)
    修改dictionary.php中的.gsearch点击事件代码:
// 给回调函数添加事件对象参数e
$(document).on('click', '.gsearch', function(e){
  // 新增这行,阻止a标签默认的跳转刷新行为
  e.preventDefault();
  var edata = $(this).text();
  var targetHref = $(this).attr('href');
  $('#gsearchsimple').val(edata);
  $('.list-group').css('display', 'none');
  $("html, body").animate({ scrollTop: 0 }, 200);
  $.ajax({
    url:"gb-tr.php",
    method:"POST",
    data:{edata:edata},
    success:function(data){
      $('#detail').html(data);
      // 新增这行,更新地址栏URL为带参数的链接,不刷新页面
      history.pushState(null, null, targetHref);
    }
  });
});
  • 第二步:新增页面初始化读取URL参数逻辑,实现直接访问带参数URL也能加载对应词条
    在dictionary.php的JS代码最外层新增初始化逻辑:
// 页面加载完成后执行
$(function(){
  // 读取URL中的Turkish参数
  var urlQuery = new URLSearchParams(window.location.search);
  var wordParam = urlQuery.get('Turkish');
  if(wordParam) {
    // 参数存在时直接请求对应词条内容
    $('#gsearchsimple').val(wordParam);
    $.ajax({
      url:"gb-tr.php",
      method:"POST",
      data:{edata:wordParam},
      success:function(data){
        $('#detail').html(data);
      }
    });
  }
});
  • 第三步:修复SQL注入风险(安全优化,避免站点被恶意攻击)
    你当前直接拼接用户输入到SQL语句的写法存在严重安全漏洞,需要改为预编译参数绑定的写法,以gb-tr.php中词条查询逻辑为例:
if(isset($_POST['edata'])){
  $edata = trim($_POST["edata"]);
  // 用?作为占位符,不要直接拼接变量
  $query = "SELECT * FROM gbtr WHERE English = ? or Turkish = ? LIMIT 5";
  $statement = $connect->prepare($query);
  // 执行时传入参数,自动处理转义
  $statement->execute([$edata, $edata]);
  $result = $statement->fetchAll();
  // 后续渲染逻辑保持不变
}

搜索联想查询的SQL逻辑也按照同样规则修改即可。

内容的提问来源于stack exchange,提问作者H. Orhon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:48:01