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

 

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后缀的。

 

 

 

 

你可能感兴趣的:(PHP)