smarty 中的转义 escape
更新日期:
文章目录
探究下 smarty 对谁做了什么样的转义。
smarty 的转义
可对以下内容进行转义(转码)
- html 可转义 & “ ‘ < >
- htmlall 可转义 all html entities
- url 可转义 : / ? = & # 汉字
- mail 可转义 @ .
- quotes
- hex 十六进制
- hexentity 十六进制实体
- javascript
参考 smarty3 手册:http://www.php100.com/manual/smarty3/language.modifier.escape.html
escape: ‘html’
它会对以下5个字符进行转义 & “ ‘ < >
会分别转义成 HTML 中对应的转义字符(& “ ‘ < >),以保证在页面上能正常显示。如下:
感觉前两天脑袋掉进一个深坑里了,不,不是深坑,是一个浅坑的拐角了,死都想不明白下面的 case。而且得出了这样的测试结论:
- 当<后跟的是英文字母(不论大小写)时,若直接输出,则会导致后面内容的缺失
- 当<后跟的是空格、数字、汉字等时,直接输出,则可显示正常
我的 case 是这样的:
靠!刚才写到这里的时候,简直是秒懂了。只能说明之前脑袋瓜档机是真的。原因:是因为我是在 smarty 中输出 然后直接显示在网页里的。所以究其原因不在于 escape:’html’ 时做了什么诡异的事情,而在于浏览器在解析 HTML 页面时碰到<会怎么处理。
escape: ‘url’
其中对以下7处进行转义:
而对英文字母数字点号 则原样保留
举例:
escape: ‘javascript’
如果有个变量要在 js 中使用,则需要对其进行 javascript 转义
escape: ‘mail’
会对 @ . 这两个字符进行转义
- @ [AT]
- . [DOT]
举例:
escape: ‘quotes’
会对单引号进行转义,把 ‘ 变成 \’
举例:
对单引号串没有转义的原因,在于单引号串和双引号串的区别。详见下方。
双引号串 vs. 单引号串
在 php(smarty 同理)中,双引号串中的内容可以被解释被替换,而单引号串中的内容总被认为是普通字符。
所以,当想在字符串中进行 变量代换 和 包含\n(\t \r \n)等转义序列时,应该使用双引号。比如:
在脚本中,
处理单引号串更快些,因为语法分析器会很单纯地处理单引号串
处理双引号串会慢些,因为会对其内部的东东进行解析