魔扣论坛

魔扣源码论坛业务
查看: 556|回复: 2

[织梦教程] PHP5.4及PHP5.5关于htmlspecialchars输出为空的问题

[复制链接]
  • TA的每日心情
    奋斗
    18 小时前
  • 签到天数: 2958 天

    [LV.Master]开坛老将

    7万

    主题

    227

    回帖

    27万

    积分

    管理员

    Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30

    魔扣币
    745789
    贡献
    157917
    威望
    32799

    最佳新人活跃会员热心会员推广达人宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2020-6-18 01:53:00 | 显示全部楼层 |阅读模式
    魔扣币兑换比例:【 50以下 : ¥1 = 10 魔扣币 】丨【 50 - 100 :¥1 = 20 魔扣币】丨【 100以上:¥1 = 30 魔扣币 】

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    单位更换新的服务器,全部采用的windows server 2008 r2 64位系统,在艰难的配置环境之后,却发现IIS7.5应用池不断报错,后来更换了PHP5.5的64位版本,就解决了问题,看来在64位win2008下,还是64位PHP才是最佳搭配啊。

    但是,苦逼的事情总是那么多,本人制作的网站是dede系统的,在登陆后台时却遇到了麻烦,登陆后提示HTTp500错误,一番搜索解决之后,又遇到发表新文章提示标题不能为空的问题,明明有标题,却不行?这是因为在PHP5.4及以后的版本中htmlspecialchars默认为UTF8,你是中文,当然检测不到你了。真纠结啊!只好按照解决DEDE标题为空的办法替换一了个遍,发现DEDE有十几处用到了htmlspecialchars属性,还好啦。

    另外转来一位技术大牛写的文章,希望对您有帮助。原文如下:

    从旧版升级到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');
    }
    然后去批量替换。

    最新版织梦系统已经解决了这个问题,将版本更新为最新即可解决。

    会员购买:>> 点击购买 << | 魔扣币购买:>> 点击购买 <<
    承接业务:服务器代维丨网站托管丨SEO
    联系客服:微信:morko-net | QQ:1367681973

    该用户从未签到

    0

    主题

    267

    回帖

    534

    积分

    高级魔扣

    Rank: 4

    魔扣币
    267
    贡献
    267
    威望
    0
    发表于 2020-6-18 10:30:19 | 显示全部楼层
    最高的不是山峰,是脚步;最深的不是海水,是情感;最清的不是溪流,是心灵;最热的不是火把,是激情;最宝贵的不是金钱,是朋友;最开心的事,不是博客,魔扣源码论坛是在这里看望朋友愿我的朋友每一天都健康平安!幸福快乐!

    该用户从未签到

    3

    主题

    239

    回帖

    481

    积分

    中级魔扣

    Rank: 3Rank: 3

    魔扣币
    239
    贡献
    239
    威望
    0
    发表于 2020-8-26 20:18:14 | 显示全部楼层
    谢谢!一定是苍天的美意,你我才相会在网易,一定是神灵的知遇,你我才结下了友谊,一定是命运的安排,你我才充满了情意,一定是缘分的奇迹,你我才成为了知己,人生能够拥有友谊,那是生命最美收益,无论你我置身何处,快乐会永随我与你,魔扣源码论坛愿我的祝福能够带给你幸福快乐。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    • 联系我们
    • 新浪微博 :
    • 在线客服 :魔扣科技 
    • 源码QQ群 :魔扣源码论坛官方总群
    • 联系邮箱 :charlin#morko.net
    • 微信扫一扫
    快速回复 返回顶部 返回列表