今天在写一个PHP脚本访问数据库时,发现其中的中文字符串使用了HTML编码方式进行存储的(比如中文字“毛”对应的HTML编码为“毛”),使得在对该字段进行条件查询时不能进接使用中文进行查询,而要将其转换为编码后再进行条件匹配。

PHP中对可读性字符与HTML编码字符相互转换时需要使用到htmlentitieshtml_entity_decode函数。于是写出如下查询语句,

    $sql = "select id,depart_name,first_name,last_name,local_name,extension,mobile,title ";
    $sql.= "from pb_extension e, pb_department d  ";
    $sql.= "where e.depart_id = d.depart_id  ";
    $sql.= "  and d.plant='".$plant."' ";
    $sql.= " and (first_name like '%".$HTTP_POST_VARS["q"]."%'";
    $sql.= " or last_name like '%".$HTTP_POST_VARS["q"]."%'";
    $sql.= " or local_name like '%".htmlentities($HTTP_POST_VARS["q"])."%'";
    $sql.= " or extension like '%".$HTTP_POST_VARS["q"]."%'";
    $sql.= " or mobile like '%".$HTTP_POST_VARS["q"]."%'";
    $sql.= " or depart_name like '%".$HTTP_POST_VARS["q"]."%'";
    $sql.= " or title like '%".$HTTP_POST_VARS["q"]."%'";
    $sql.= ")  ";

并执行。可是怪是却发生了,此语句在SQL Analyzer中可以正确执行并查询出结果,而在IE中很执行这段脚本却提示查询结果为零,这是为什么呢?

经过仔细检查这段SQL,并查看在IE中的源码,发现了问题的根结所在。查询值经htmlentities函数后转换为HTML编码,此编码中存在着特殊字符&(如第一段中的举例),在IE中这个字符是另有含义的。在IE中一般都是使用“&”来表示这个符号的,导致在IE中看到输出的SQL语句和真正执行的语句是不一样的。

要解决这个问题就要想个办法不让IE使用“&”表示“&”符号。经过一翻查询,发现使用如下代码可以解决这个问题。

<?php
  $trans = get_html_translation_table(HTML_ENTITIES);
  $trans = array_flip($trans);
  $encoded = "Hallo &amp; &lt;Frau&gt; &amp; Kr&auml;mer";
  $original = strtr($encoded, $trans);
  echo $original;
?>

执行这段代码,输出的$original变量值为“Hallo & <Frau> & Krämer”,这正是我想要的结果。

以上是我在工作中遇到的问题及解决方法,特将其写在我的Blog上,与那些遇到和我相似问题的朋友们一起分享。

PHP对HTML编码字符串的处理相关推荐

  1. 格式化输出,运算符,编码,字符串(索引,切片,大小写转换等等)

    格式化输出%s和format{} , 运算符 , 编码 , 字符串(索引,切片,大小写转换,拉长字符,去空格,替换,切割,格式化输出format , count数数 , find查找 , index求 ...

  2. PHP 图片转base64编码 和 base64编码字符串转换成图片保存

    1.图片转base64编码: /*图片转换为 base64格式编码*/ $img = 'uploads/01.png'; $base64_img = base64EncodeImage($img); ...

  3. pythonascii怎么转换字符串_Python 十六进制整数与ASCii编码字符串相互转换方法

    在使用Pyserial与STM32进行通讯时,遇到了需要将十六进制整数以Ascii码编码的字符串进行发送并且将接收到的Ascii码编码的字符串转换成十六进制整型的问题.查阅网上的资料后,均没有符合要求 ...

  4. Java中将base64编码字符串转换为图片

    前一段时间,在做摄像头拍照上传,摄像头拍的照片为base64编码格式的字符串,需要上传至项目中,则需要使用到将base64编码字符串转换为图片 1.将base64编码字符串转换为图片的代码如下 Ima ...

  5. JS中文字符串和UTF-8编码字符串相互转换

    1.中文字符串转化为UTF-8编码,如"<汉字>"的UTF-8编码为"%3C%E6%B1%89%E5%AD%97%3E" 2.UTF-8编码字符串& ...

  6. 2017北大信科夏令营机试B:编码字符串

    B:编码字符串 查看 提交 统计 提问 总时间限制:  1000ms  内存限制:  65536kB 描述 在数据压缩中,一个常用的方法是行程长度编码压缩.对于一个待压缩的字符串,我们可以依次记录每个 ...

  7. python十六进制转换为字符串_Python 十六进制整数与ASCii编码字符串相互转换方法...

    在使用Pyserial与STM32进行通讯时,遇到了需要将十六进制整数以Ascii码编码的字符串进行发送并且将接收到的Ascii码编码的字符串转换成十六进制整型的问题.查阅网上的资料后,均没有符合要求 ...

  8. html实体编码转换工具,编码字符串转换工具(CodeView)

    UTF16,UTF32,UNICODE,ANSI,CP54936编码字符串转换工具.例如:在工具中输入"我是中国人",UTF16,UTF32,UNICODE,ANSI,CP5493 ...

  9. 压缩图片并转换为BASE64编码字符串

    调用全国人口信息社会应用平台的人像比对服务,请求参数之一"公民人像BASE64编码字符串",限制大小为30KB: 使用谷歌处理图片的开源工具(thumbnailator),可以对图 ...

  10. python3.6遇到Unicode编码字符串比较问题:\u672a\u4f7f\u7528与同样内容的变量比较总是false[已解决]

    我的state变量值是一个unicode编码的字符串,需求是和一个unicode编码的字符串比较 state == '\u672a\u4f7f\u7528' //结果是false 原因及解决方法: 当 ...

最新文章

  1. ICinsights:中国芯片难达成既定的2025目标
  2. random(随机函数生成)
  3. 美团数据库高可用架构的演进与设想
  4. SQL实用技巧:如何将表中某一列的部分数据合并到一行中
  5. java文件写入_java怎么写入文件
  6. Android Wear Hello World
  7. Dubbo-admin无法显示Group分组信息
  8. JSP与Servlet传值及对比
  9. docker 时区_腾讯云上用Docker建立Kiftd服务器
  10. 推荐:详解AI加速器(最终篇)
  11. java闰年的计算方法_java中对 闰年的计算 以及月份天数
  12. 从个人邮箱登录页面进入后,邮箱如何撤回邮件?
  13. 第6章 查询处理和查询优化
  14. vue.js和vue.main.js下载地址
  15. NTP 时区+时间同步
  16. 相亲小程序如何做到年入百万?盈利模式是什么?
  17. 面向6G网络的太赫兹通信技术研究综述
  18. 搭建PC网校的4大优势
  19. ABB机器人通过安装管理器重做系统
  20. 机器学习和深度学习路线

热门文章

  1. PAT 甲级-算法初步
  2. (记录向)Python反序列化免杀上线CS(并使用Shielden加密绕过360)
  3. VS中重复定义的解决方法
  4. 盒子垂直居中的三种办法
  5. JavaScript奇技淫巧:隐形字符
  6. 2021未来杯区块链应用创新大赛正式启动!
  7. Oracle数据库的体系结构和用户管理
  8. 58T城~~~~~~青龙脚本
  9. OTB50、100、2013、2015的区别
  10. 高通骁龙wear4100怎么样 相当于骁龙多少