PHP Smarty 环境下Ajax 中文查询的研究

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:cecil666666
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:Ajax技术被广泛应用于网页开发过程,可以实现无刷新与数据库交互,大大节约了数据搜索的时间、提高了搜索的效率。但是由于Ajax技术默认UTF-8编码方式,在开发网站过程中,很有可能由于编码问题导致中文查询实现不了的情形。在编码方式统一的前提下,运用encodeURI()函数能有效地解决问题,实现中文查询。
  关键词:中文查询;Smarty模板;Ajax技术;PHP
  中图分类号:TP311.1 文献标识码:A 文章编号:1009-3044(2015)26-0071-02
  Research on Chinese Query using Ajax Technology in PHP and Smarty Environment
  HUANG Ling-na
  (Wuxi City College of Vocational Technology,Wuxi 214000,China)
  Abstract:Ajax technology is widely used in the process of web development, it can achieve no refresh and database interaction, greatly saving the time of data search, improve the efficiency of the search. However, due to the default Ajax technology UTF-8 encoding way, in the development of the site process, it is possible that the problem caused by encoding’s Chinese query cannot achieve the situation. Under the premise of the unity of the encoding mode, the use of encodeURI () function can effectively solve the problem, to achieve the Chinese query.
  Key words:Chinese Query;Smarty;Ajax;PHP
  随着电子商务的发展,越来越多的人们选择在网络平台上购物,而信息搜索是电商网站最基本、也是极其重要的一项功能,用户在网页上可以通过搜索快速找到自己感兴趣的商品,从而免去了逐个查找的不便,大大提高了购物速度,省却了时间和精力。
  PHP是一种在服务器上运行的开发语言,是一种类似ASP的服务器端脚本语言[1],在TIOBE 编程语言排行榜上名列前茅,是一种网站开发的主流开发技术。在PHP众多开发模板中,Smarty模板一直处于领先地位,利用Smarty模板可以实现网页代码控制和页面美工分离开来,从而使得开发过程更加清晰明了,利于后期的修改和完善。Smarty运行速度极快;效率高;模板只需被解析一次,无需重复[2],正是由于Smarty模板的高效性以及合理的开发模式,使得Smarty模板在网站开发过程中成为开发人员的有力臂膀。
  在开发网站搜索功能时,Ajax技术可以实现在不刷新页面的情况下与数据库交互,这项技术极大地提高了网页和数据库之间的访问速度,Ajax技术具有以下优点:[3]
  1)减轻了服务器的负担。因为 AJAX 技术是按需取数据,所以最大可能地减少了冗余请求和响应对服务器造成的负担。
  2)无刷新更新页面,减少用户的等待时间。
  在利用Ajax技术实现查询功能时需要特别注意编码问题,Ajax不支持多种字符集,默认的字符集是UTF-8,所以在使用Ajax技术时应该进行编码转换,否则程序中出现的中文字符将变成乱码,[4]从而影响中文查询的结果。
  1 Ajax技术实现查询的过程
  1.1 初始化XMLHttpRequest对象,建立createxmlhttp.js文件
  XMLHttpRequest是一个具有应用程序接口的JavaScript对象,该对象通过HTTP连接服务器,利用XMLHttpRequest技术,Ajax可以像桌面应用程序一样只同服务器进行数据层面的交换,而不用每次都刷新页面,从而减轻了服务器的负担,又加快了查询的响应速度。考虑到XMLHttpRequest对象不是一个W3C,在实际应用中,不同的浏览器,有不同的初始化方法,因此,可以创建createxmlhttp.js文件,针对不同的浏览器初始化为不同的实例对象。
  1.2通过open()方法以及XMLHttpRequest对象的常用属性完成异步查询请求
  XMLHttpRequest对象提供了open()方法用于设置异步请求目标的URL,在利用xmlhttp.open("GET",url,true)请求数据库响应的过程中,其中的参数url为请求目标的URL,往往为一个PHP文件,在提交请求的同时可以将查询关键字通过附加URL的方式一同提交给目标URL。XMLHttpRequest对象还提供了一系列的常用属性,可以通过ready State属性的值来判断请求的状态;response Text属性为服务器的响应,根据服务器返回值的不同可以给出不同的查询结果;onreadystatechange属性往往可以和匿名函数联合使用用于确保每个状态改变时都会触发这个事件处理器。
  1.3编写请求目标PHP文件,实现Ajax查询
  在调用open()方法进行异步请求的过程中设置了请求目标的url,该目标URL所对应的文件主要是进行数据查询,在查询过程中,文件首先将通过附加URL变量方式传递过来的查询关键字接收,通过编写SQL语句对数据库进行查询,并可将查询结果记录在Session变量中供后期显示在网页上,同时将查询状态返还给XMLHttpRequest对象。   2 Ajax技术在查询过程中出现的中文乱码问题
  Ajax技术并不支持多种字符集,默认支持的是UTF-8字符集,这也就意味着在发送数据的时候Ajax会使用UTF-8编码后发送,这时候如果页面使用的不是同样的编码,就会出现以下情形:明明数据库中有数据,但中文搜索却查询不到。假使在程序运行过程中利用跟踪技术就可以发现通过附加URL变量发送数据时,PHP接收到的是乱码,因此在使用select语句查询时where子句的条件配对成了问题。
  3 中文查询乱码的解决方法
  3.1编码方式的统一
  在实际开发过程中,往往将客户端和服务器端都使用统一的编码,可以使用以下方法设置编码方式:
  1) 在创建页面的过程中指定编码方式
  2) 在页面顶部使用header()语句指定发送数据的编码方式
  3.2使用encodeURI()函数编码
  由于Ajax技术在发送数据的时候默认使用的是UTF-8字符集,所以当Ajax发送中文数据,PHP负责接收的时候就有可能由于编码的不同导致乱码的产生。这时候encodeURI()函数就起到了至关重要的作用。
  encodeURI() 函数是一个Javascript函数,可把字符串作为 URI 进行编码。在实际使用中,可以使用该函数先对需要通过Ajax发送的数据进行编码,然后再发送出去,由PHP负责接收,这样一来就能解决由于编码不同导致接收乱码的问题。
  如想在页面上实现通过搜索商品名称查询商品信息,可以使用以下JS代码解决问题。
  var name=encodeURI(form.name.value);//获取文本框的值
  var url="search.php?name=" name;
  xmlhttp.open("GET",url,false);//不刷新验证是否存在该商品
  xmlhttp.onreadystatechange=function()
  {
  if(xmlhttp.readyState==4)
  {
  var ishave=xmlhttp.responseText;//返回值是一个字符串
  ishave=ishave.replace(/\s /g,"");
  if(ishave==’1’)
  {
  alert("不存在该商品");
  form.name.select();
  return false;
  }
  if(ishave==’2’)
  {
  form.name.select();
  window.location.href=’main.php?page_type=search2’;
  }
  }
  }
  xmlhttp.send(null);
  作为一种无刷新即可查询数据库的技术手段,Ajax技术被广泛应用于网页查询中,而查询支持中文是一项最基本的要求。因此,在开发过程中,程序员要特别注意各个页面编码方式的统一,同时灵活运用encodeURI()对发送的数据进行编码转换,实际有效的解决中文查询过程中出现的乱码问题,开发出真正符合用户实际需求的搜索界面。
  参考文献:
  [1] 赵鹤芹. 设计动态网站的最佳方案 Apache PHP MySQL[J].计算机工程与设计,2007(2):993-994.
  [2] 宋尚平,李兴保. PHP模板引擎Smarty的安装配置及应用实现[J].现代教育技术,2007(9):80.
  [3] 吕林涛,万经华,周红芳. 基于 AJAX 的 Web 无刷新页面快速更新数据方法[J]. 计算机应用研究,2006(11):199.
  [4] 明日科技.PHP从入门到精通[M].北京:清华大学出版社,2012:449.
其他文献
摘要:针对当前高校《数据库原理及应用》教学中,涉及专业较多、学生能力参差不齐、学习积极性差等问题,该文探讨了基于游戏驱动的《数据库原理及应用》课程教学方法。该方法将课程中主要的知识点,以一定的形式隐含在游戏中,学生以游戏通关的形式逐一练习掌握。通过基于游戏驱动的教学,可以在一定程度上调动学生的学习兴趣及积极性,且能够提高学生学习的灵活性,实现一定范围内的因材施教。  关键词:数据库原理及应用;教学
从1945年八路军解放邯郸,到1949年,中国共产党对邯郸市进行了一系列城市管理工作的探索与实践,为中国共产党实现工作重心由农村到城市的转变和以后接管改造其他城市,提供了依
在移动互联时代,无纸化办公、电子政务、移动娱乐,显然是当下移动设备最普遍的应用。然而要"一身轻",必须有更贴切用户使用的移动装备。在移动装备的冲击下,PC机显然在这场"变革
摘要:计算机组装和维护教学在高校计算机教学工作中占据着非常重要的地位。实际上近几年,计算机组装和维护教学实验工作一直没有得到人们应有的重视,尽管现在取得了一定的成就,但是其教学模式、教学内容、教学设备以及后期的审核工作都存在一些问题,并且制约了我国计算机组装和维护工作的落实。该文主要阐述了计算机组装和维护实验教学工作,通过分析计算机组装和维护实验教学现状提出了相应的优化对策。  关键词:计算机组装
大学生成长过程中面临着思想、心理和生活等各种问题,加强和改进大学生思想政治教育工作势在必行.大学生思想政治教育的原则是:坚持以人为本,贴近实际,以大学生全面发展为目
大学精神是经过长期历史积淀形成的,由师生为主体共同创造的关于大学教育的价值体系和信念体系。人文教化精神、科学探索精神、学术自由精神是大学精神的基本思想内涵。从本源
利用四氯化碳提取宁夏枸杞子的非极性物质。采取Schaal烘箱法研究枸杞子非极性提取物在食用油氧化过程中的作用。结果表明低浓度的非极性提取物对葵花籽油具有良好的氧化抑制
通过紫外线、硫酸二乙酯、亚硝基胍诱变对马腺疫链球菌兽疫亚型(Streptococcus zooepidemicus)诱变处理筛选适合透明质酸生产菌株。对比三种诱变方法对菌种的菌落形态、溶血性
三星在MP3播放器市场可谓独领风骚,旗下产品种类繁多,层出不穷。而最新焦点当然是Photo Yepp及YP-ND64 MP3播放器。
摘要:该文基于我国东南沿海某电离层观测站的垂测电离图,将电离图净化的操作分为背景噪声删除、散点信号删除和多模多径信号删除三个步骤,通过将模糊几何法与统计滤波相结合,有效删除垂测电离图的噪声干扰信号,同时,利用多模多径信号能量、距离及高度特性对多模多径信号进行了有效抑制。为后期电离层描迹提取和特征参数的度量奠定良好的基础,该算法具有非常强的通用性和易于实现性,对于实际项目有较高的参考价值。  关键词