php htmlspecialchars 不管用,php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总_php技巧...

从旧版升级到php5.4,恐怕最麻烦的就是htmlspecialchars这个问题了!当然,htmlentities也会受影响,不过,对于中文站来说一般用htmlspecialchars比较常见,htmlentities非常少用到。

可能老外认为网页普遍应该是utf-8编码的,于是苦了那些用GB2312,GBK编码的中文站......!

具体表现: 代码如下:

$str = "9enjoy.com的php版本是5.2.10";

echo htmlspecialchars($str);

gbk字符集下输出为空...utf-8下,输出正常。

为什么呢,原因在于5.4.0对这个函数的变化:

代码如下:

5.4.0 The default value for the encoding parameter was changed to UTF-8.

原来是什么呢?

代码如下:

string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = 'UTF-8' [, bool $double_encode = true ]]] )

Defines encoding used in conversion. If omitted, the default value for this argument is ISO-8859-1 in versions of PHP prior to 5.4.0, and UTF-8 from PHP 5.4.0 onwards.

原来是ISO-8859-1,5.4后默认变成utf-8!然后中文使用这个函数就输出为空白了。

国内一堆开源程序在5.4下都会有这样的问题,DISCUZ官方也建议用户不要升级到5.4

解决方案:

1.苦逼的修改所有用到htmlspecialchars地方的程序

1.1 其第二个$flags参数,默认是ENT_COMPAT,因此改成

代码如下:

htmlspecialchars($str,ENT_COMPAT,'GB2312');

为什么不是GBK?因为没有GBK这个参数,如果强行使用GBK,则报错给你看:

代码如下:

Warning: htmlspecialchars(): charset `gbk' not supported, assuming utf-8

为了能使用GBK,则改成:

代码如下:

htmlspecialchars($str,ENT_COMPAT,'ISO-8859-1');

1.2.一样是改程序,但可以省略一个参数。

可以在网页头部加

代码如下:

ini_set('default_charset','gbk');

然后改成

代码如下:

htmlspecialchars($str,ENT_COMPAT,'');

文档中有写:An empty string activates detection from script encoding (Zend multibyte), default_charset and current locale (see nl_langinfo() and setlocale()), in this order. Not recommended.

大概意思就是:传入空字符串则使用default_charset的编码

1.3.封装一个函数吧...本来htmlspecialchars这个单词一直不好记。

代码如下:

function htmlout($str) {

return htmlspecialchars($str,ENT_COMPAT,'ISO-8859-1');

}

然后去批量替换。

2.直接修改源码,重编译!这也是目前我在线上做的方案。

修改ext/standard/html.c

大概在372行

代码如下:

/* Default is now UTF-8 */

if (charset_hint == NULL)

return cs_utf_8;

把cs_utf_8改成 cs_8859_1

代码如下:

/* Default is now UTF-8 */

if (charset_hint == NULL)

return cs_8859_1;

编译后,原程序就不用做任何调整了。

安装方法可参考:http://www.gxlcms.com/article/63388.htm

windows下怎么办?这个,自己想办法编译吧,难度比较大...

提供一个网址供参考:http://www.gxlcms.com/article/63391.htm

引用其一句话:准备好咖啡、可乐,做好准备,可能要折腾数小时…

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563604.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab 微秒 符号,matlab处理csi

使用python调用matlab API接口进行数据分析找到matlab安装目录下自带的setup.py的路径我的路径如下D:\MATLAB\R2018a\extern\engines\python打开cmd进入到刚才找到的路径管理员权限执行!!! pyhton setup.py install具体代码1.将csiTool中的ma…

日冕物质抛射检测matlab,日冕图像论文,关于基于实时数据的日冕物质抛射自动检测方法相关参考文献资料-免费论文范文...

导读:本论文主要论述了日冕图像论文范文相关的参考文献,对您的论文写作有参考作用。(昆明理工大学信息与自动化学院,昆明 650504)(Faculty of Information Engineering and Automation,Kunming University of Science and Technology,Kunming 650504,China)摘 要:本…

link url下载php,php脚本生成google play url的下载链接,下载apk并自动反编译后获取android版本号...

php脚本生成google play url的下载链接,下载apk并自动反编译后获取android版本号需求:get the offer tracking linkfollow the redirect to get google play urlGo to http://apps.evozi.com/apk-downloader/Enter google play urlDownload APK fileDecompile APK f…

java中.of,java中instanceof的用法

java 中的instanceof 是一个二元操作符(运算符)运算符,由于是字母组成,所以是Java的保留关键字,它的作用是用来判断,instanceof 左边对象是否为instanceof 右边类的实例,返回一个boolean类型值。还可以用来判断子父类的…

java实现鸭子类型,Golang的interface及duck typing鸭子类型

Golang的interface及duck typing鸭子类型“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。” 意思就是: 一个东西究竟是不是鸭子,取决于它能不能满足鸭子的工作。duck typing 多见于动态语言,例如PHP,Python等…

小猴吃桃matlab,看图写话:小猴吃桃精彩选篇

看图写话:小猴吃桃精彩选篇两只聪明的小猴子一天上午,风和日丽。佳佳和皮皮到小溪边玩耍,忽然皮皮开心的大叫:“快看那边有好多又大又红的桃子!”这时佳佳也高兴的欢呼着,馋的它们开水直流。皮皮和佳佳都在…

php mysql 分行执行,php执行mysql存储及执行脚本

php执行mysql存储及执行脚本php页面执行mysql存储过程:# vi cunchu.php$db new mysqli("localhost","root","123456","team1");$result$db->query("CALL challenge_crontab()");?>:wq注释:执行team1数据…

oracle 换字段顺序,修改ORACLE的字段顺序

首先你要有一个pl/sql,其实没有也行,但是这数据库还是有一个可视化界面为好啊。1.首先,以sys用户的身份登录PL/SQL2.查询出你要更改的表的ID,以我本地的数据为例,我要改‘FINACE‘用户下‘INCOME‘这张表。注&#xff…

oracle单行子查询返回多个行 order by,单行子查询返回多个行 Issue分析求助

with order_base as --获取订单基础情况(select ou.order_key order_key, ou.order_quantity_i, ood.dispatch_time_t, ou.part_number_s, I032ZZ01 pline_name_sfrom order_uv ou left join at_as_om_orderdispatchstatus ood on ou.order_key ood.order_54union allselect m…

php按照名称搜索,PHP从类型和名称搜索

很抱歉,标题不好,但我不知道有更好的选择.目前,我正在创建一个搜索引擎以获取产品详细信息.我有2种搜索类型,第一种是使用产品类型进行搜索,另一种是使用产品名称进行搜索.这是搜索代码:$search_exploded explode (" ", $search);$x "";$cons…

srvctl 在oracle下运行,在RAC 中解决 vipca 和 srvctl 无法执行的错误

问题一: vip创建问题/home/oracle/crs/oracle/product/10/crs/jdk/jre//bin/java: error while loading shared libraries: libpthread.so.0: cannot open shared object file解决方法:这个错误一般是在 5上装 时会碰到的,当界面提示你用root脚本执行相应…

简述oracle数据库特殊状态,【OracleDB】 01 概述和基本操作

实例概念:Oracle有一个特殊的概念Oracle数据库 数据库 Oracle文件系统 Oracle实例实例处理Oracle的请求,调用文件系统然后返回结果响应给客户端单实例和多实例一个数据库可以对应多个实例操作数据库服务这是Oracle数据库的服务,一定要安装…

oracle会闪,oracle闪来

当前位置:我的异常网 数据库 oracle闪来oracle闪来www.myexceptions.net 网友分享于:2013-09-10 浏览:1次oracle闪回闲来无事,把以前的笔记整理一下放到这里。默认情况下,oracle10g可以直接闪回表,闪回表数据&#…

oracle导出有分区表的用户,分区表导出导入

--创建分区表create table t2(id int,name varchar2(10))partition by range(id)(partition p1 values less than(10),partition p2 values less than(20),partition p3 values less than(30),partition p4 values less than(40),partition p5 values less than(50))--插入数据…

php分流短信服务商,使用第三方短信服务商云片发送短信(php样例)

//智能匹配模版接口发送样例$apikey "---------------------------"; //请用自己的apikey代替$mobile "--------------"; //请用自己的手机号代替$text"【云片网】亲爱的doubiyuzai,您的验证码是------。有效期为100000000小时&#xff…

oracle中affirm,2.Oracle Data Guard 参数介绍

Oracle Data Guard 参数介绍Data Guard作为Oracle提供的一个高可用及灾备解决方案,理解并可以实施它对于DBA来说是非常重要套的技能上节介绍了有关Data Guard的概念,这节将介绍相关的一些参数有的参数是做为备库角色时才生效的,会单独说出来1. DB_NAME该…

linux lib目录找不到,linux中jpeglib库文件我安装了,但是我运行自己写的代码总是找不到这个库...

首先,找到你的VC6.0的安装路径(就是你安装到哪里了,不是你安装包setup.exe的路径),假设按照默认路径安装的话,头文件和库文件的路径应该是这样子的:include files:C:\Program Files\Microsoft Visual Studio\VC98\INCL…

连接linux桌面命令,连接Linux远程桌面的四个方法

有下面四种方法:一、通过xshell直接调用程序窗口。二、通过xbrower连接Linux完整的桌面。三、通过Linux连接Linux的远程桌面,可完整桌面,也可打开程序窗口。四、通过VNC连接桌面。一、安装xmanager,用xshell连接到Linux服务器&…

linux基础磁盘管理,Linux基础入门-文件系统操作与磁盘管理

chrome 更新flash插件下载下面的插件并安装 https://fpdownload.macromedia.com/pub/labs/flashruntimes/flashplayer/install_flash_player ...sort DEMO测试用文件: [weblogicetp-mall-dev7][/tmp]$ cat msn.txt aaa, fff, bbb, cc, ee, gg, hh, zz, mmm, DEMO1:按第一 ...Qt…

linux mysql 性能提高,高手心得:提高MySQL性能的方法

lgms2008 于 2006-09-20 00:18:05发表:5. NOT我们在查询时经常在where子句使用一些逻辑表达式,如大于、小于、等于以及不等于等等,也可以使用and(与)、or(或)以及not(非)。NOT可用来对任何逻辑运算符号取反。下面是一个NOT子句的例子:... whe…