|  RSS订阅  |  加入收藏

解决ThinkPHP升级5.1后输出字符被转义的问题。

ThinkPHP在升级到5.1.7后,在模版输出上默认使用了htmlentities函数,和之前版本中默认采用的htmlspecialchars函数有区别。
摘要
...

最近给博客升级框架,由于从5.0过渡到5.1要修改的地方还蛮多的,加上之前一些代码在实际运行中略显低效,索性就把后端重构一下。把一些关键部位调整到位后刷新页面,发现原先用于输出备案信息的地方被转义输出成字符串了,印象中TP模版输出默认是使用htmlspecialchars函数的,既然能原样输出字符串,所以和后端改造的关联不大。



使用raw方法不进行转义输出。

TP最近升级的很是生猛,只好去翻下手册了,在模版章节,使用函数部分,TP给了这样一个说法:为了避免出现XSS安全问题,默认的变量输出都会使用 htmlentities 方法进行转义输出。如果不想被转义,那只需要在变量后面加上raw方法即可,如:{$anji|raw}

除了raw方法,TP还给了一个配置方法,在template.php配置中添加一项'default_filter' => 'htmlspecialchars',这样也可以将htmlentities 换成 htmlspecialchars过滤。


htmlentities()和htmlspecialchars()的区别。

一直用htmlspecialchars函数,htmlentities别说用了,一点印象都没有(汗,还是手册看少了)。特地去翻了下手册,htmlentities就是将所有字符转换为HTML实体,也就是全部转义输出。而htmlspecialchars是把预定义的字符转换为HTML实体。htmlspecialchars字符包括连接符(&)、双引号(")、单引号(')、小于(<)、大于(>)。如果需要把HTML实体再转换为字符,这两个函数都提供了一个decode函数分别是html_entity_decode()、htmlspecialchars_decode(),拼写有区别,前面是拆分html和entity加下划线后追加_decode的,而后者是直接补_decode后缀的。


PS.刚刚升级PHP版本和Mysql版本,卡不出来了,就差点删库跑路了,笑~


打赏
  PHP    
转载请注明出处,未经许可禁止商用!
西枫里 熊掌号
代码改变世界 ———— 半路出家,全程修道
发表评论
*依据《网络安全法》规定,您需实名认证后才能评论!
@橘子书:欢迎橘子大佬常来坐坐,指导下工作
@雅兮网:啊啊啊,被催更了,这几天被钻到漫威里面去了,更更更,不更不睡觉
@银色月航:今晚不更完不睡觉
哇哦,厉害!
膜拜技术大佬,顺便催更
大佬的博客,越来越简洁了!
我只关心你的心灵鸡汤博客啥时候出来
@闲鱼:不备份的后果就是搞坏了就不玩了,哈哈哈
@看,那只鸽子:我昨天和今天都在外面办事,没留意诶。这会儿打开还挺好的呀?你那边异常?
一言不合就删库跑路,毫无压力
昨天和今天,阿里云的CDN出现波动,今天也是,博主今天遇到了吗?
@银色月航:主要用来熟悉WP,等能玩转了的时候正式更文
@西枫里人:赶紧把新博客搞好,生活、情感、日记、音乐、美文
@沈唁志:那就更生活文。我已经开了一个生活博客了
技术文,我最近已经不想更了。。。
@里维斯社:我就水个文,这么快就被发现了,尴尬~
西枫大佬出文章还挺快的,刚刚不能访问,现在文章都出来了