|  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过滤。


使用htmlspecialchars_decode把预定义的实体转为字符

上述使用raw方法输出后的内容,由于写入的关系,有可能不转义输出的结果是变成了预定义的实体字符,如果要继续达到被html解析的普通字符效果,还需要在将实体字符转换成普通字符,前述我们在配置文件中定义得利htmlspecialchars过滤,那么就需要使用htmlspecialchars_decode函数进行转换。如{$anji|raw|htmlspecialchars_decode}


htmlentities()和htmlspecialchars()的区别。

一直用htmlspecialchars函数,htmlentities别说用了,一点印象都没有(汗,还是手册看少了)。特地去翻了下手册,htmlentities就是将所有字符转换为HTML实体,也就是全部转义输出。而htmlspecialchars是把预定义的字符转换为HTML实体。htmlspecialchars字符包括连接符(&)、双引号(")、单引号(')、小于(


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


如文章有用,给个赞助吧
  PHP    
转载请注明出处,未经许可禁止商用!
发表评论
*依据《网络安全法》规定,您需实名认证后才能评论!

西枫里人
@橘子书:欢迎橘子大佬常来坐坐,指导下工作

西枫里人
@雅兮网:啊啊啊,被催更了,这几天被钻到漫威里面去了,更更更,不更不睡觉

西枫里人
@银色乐航:今晚不更完不睡觉

橘子书
哇哦,厉害!

雅兮网
膜拜技术大佬,顺便催更

品牌馆
大佬的博客,越来越简洁了!

银色乐航
我只关心你的心灵鸡汤博客啥时候出来

西枫里人
@闲鱼:不备份的后果就是搞坏了就不玩了,哈哈哈

西枫里人
@看,那只鸽子:我昨天和今天都在外面办事,没留意诶。这会儿打开还挺好的呀?你那边异常?

闲鱼
一言不合就删库跑路,毫无压力

看,那只鸽子
昨天和今天,阿里云的CDN出现波动,今天也是,博主今天遇到了吗?

西枫里人
@银色乐航:主要用来熟悉WP,等能玩转了的时候正式更文

银色乐航
@西枫里人:赶紧把新博客搞好,生活、情感、日记、音乐、美文

西枫里人
@沈唁:那就更生活文。我已经开了一个生活博客了

沈唁
技术文,我最近已经不想更了。。。

西枫里人
@里维斯社:我就水个文,这么快就被发现了,尴尬~

里维斯社
西枫大佬出文章还挺快的,刚刚不能访问,现在文章都出来了