PHP对HTML编码字符串的处理
今天在写一个PHP脚本访问数据库时,发现其中的中文字符串使用了HTML编码方式进行存储的(比如中文字“毛”对应的HTML编码为“毛”),使得在对该字段进行条件查询时不能进接使用中文进行查询,而要将其转换为编码后再进行条件匹配。
PHP中对可读性字符与HTML编码字符相互转换时需要使用到htmlentities和html_entity_decode函数。于是写出如下查询语句,
$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使用“&”表示“&”符号。经过一翻查询,发现使用如下代码可以解决这个问题。
$trans = get_html_translation_table(HTML_ENTITIES);
$trans = array_flip($trans);
$encoded = "Hallo & <Frau> & Krämer";
$original = strtr($encoded, $trans);
echo $original;
?>
执行这段代码,输出的$original变量值为“Hallo & <Frau> & Krämer”,这正是我想要的结果。
以上是我在工作中遇到的问题及解决方法,特将其写在我的Blog上,与那些遇到和我相似问题的朋友们一起分享。
PHP对HTML编码字符串的处理相关推荐
- 格式化输出,运算符,编码,字符串(索引,切片,大小写转换等等)
格式化输出%s和format{} , 运算符 , 编码 , 字符串(索引,切片,大小写转换,拉长字符,去空格,替换,切割,格式化输出format , count数数 , find查找 , index求 ...
- PHP 图片转base64编码 和 base64编码字符串转换成图片保存
1.图片转base64编码: /*图片转换为 base64格式编码*/ $img = 'uploads/01.png'; $base64_img = base64EncodeImage($img); ...
- pythonascii怎么转换字符串_Python 十六进制整数与ASCii编码字符串相互转换方法
在使用Pyserial与STM32进行通讯时,遇到了需要将十六进制整数以Ascii码编码的字符串进行发送并且将接收到的Ascii码编码的字符串转换成十六进制整型的问题.查阅网上的资料后,均没有符合要求 ...
- Java中将base64编码字符串转换为图片
前一段时间,在做摄像头拍照上传,摄像头拍的照片为base64编码格式的字符串,需要上传至项目中,则需要使用到将base64编码字符串转换为图片 1.将base64编码字符串转换为图片的代码如下 Ima ...
- JS中文字符串和UTF-8编码字符串相互转换
1.中文字符串转化为UTF-8编码,如"<汉字>"的UTF-8编码为"%3C%E6%B1%89%E5%AD%97%3E" 2.UTF-8编码字符串& ...
- 2017北大信科夏令营机试B:编码字符串
B:编码字符串 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 在数据压缩中,一个常用的方法是行程长度编码压缩.对于一个待压缩的字符串,我们可以依次记录每个 ...
- python十六进制转换为字符串_Python 十六进制整数与ASCii编码字符串相互转换方法...
在使用Pyserial与STM32进行通讯时,遇到了需要将十六进制整数以Ascii码编码的字符串进行发送并且将接收到的Ascii码编码的字符串转换成十六进制整型的问题.查阅网上的资料后,均没有符合要求 ...
- html实体编码转换工具,编码字符串转换工具(CodeView)
UTF16,UTF32,UNICODE,ANSI,CP54936编码字符串转换工具.例如:在工具中输入"我是中国人",UTF16,UTF32,UNICODE,ANSI,CP5493 ...
- 压缩图片并转换为BASE64编码字符串
调用全国人口信息社会应用平台的人像比对服务,请求参数之一"公民人像BASE64编码字符串",限制大小为30KB: 使用谷歌处理图片的开源工具(thumbnailator),可以对图 ...
- python3.6遇到Unicode编码字符串比较问题:\u672a\u4f7f\u7528与同样内容的变量比较总是false[已解决]
我的state变量值是一个unicode编码的字符串,需求是和一个unicode编码的字符串比较 state == '\u672a\u4f7f\u7528' //结果是false 原因及解决方法: 当 ...
最新文章
- ICinsights:中国芯片难达成既定的2025目标
- random(随机函数生成)
- 美团数据库高可用架构的演进与设想
- SQL实用技巧:如何将表中某一列的部分数据合并到一行中
- java文件写入_java怎么写入文件
- Android Wear Hello World
- Dubbo-admin无法显示Group分组信息
- JSP与Servlet传值及对比
- docker 时区_腾讯云上用Docker建立Kiftd服务器
- 推荐:详解AI加速器(最终篇)
- java闰年的计算方法_java中对 闰年的计算 以及月份天数
- 从个人邮箱登录页面进入后,邮箱如何撤回邮件?
- 第6章 查询处理和查询优化
- vue.js和vue.main.js下载地址
- NTP 时区+时间同步
- 相亲小程序如何做到年入百万?盈利模式是什么?
- 面向6G网络的太赫兹通信技术研究综述
- 搭建PC网校的4大优势
- ABB机器人通过安装管理器重做系统
- 机器学习和深度学习路线