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

1. 都说用raw函数可以原样输出,我得到的却是Call to undefined function raw()

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

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

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