解决ThinkPHP升级5.1后输出字符被转义的问题
2023-03-29 23:03:03
131
{{single.collect_count}}

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

为了避免出现XSS安全问题,默认的变量输出都会使用htmlentities方法进行转义输出。如果不想被转义,那只需要在变量后面加上raw方法即可,如:{$param|raw}

你还可以设置默认的过滤方法,在配置文件template.php中设置
'default_filter' => 'htmlspecialchars'

就会默认使用htmlspecialchars方法过滤输出。

如果你不需要转义(例如你需要输出html表格等内容),可以使用:

{$data.name|raw}

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

回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}