文章目录
  1. 1. smarty 的转义
    1. 1.1. escape: ‘html’
    2. 1.2. escape: ‘url’
    3. 1.3. escape: ‘javascript’
    4. 1.4. escape: ‘mail’
    5. 1.5. escape: ‘quotes’
  2. 2. 双引号串 vs. 单引号串

探究下 smarty 对谁做了什么样的转义。

smarty 的转义

可对以下内容进行转义(转码)

  1. html 可转义 & “ ‘ < >
  2. htmlall 可转义 all html entities
  3. url 可转义 : / ? = & # 汉字
  4. mail 可转义 @ .
  5. quotes
  6. hex 十六进制
  7. hexentity 十六进制实体
  8. 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)等转义序列时,应该使用双引号。比如:

在脚本中,
处理单引号串更快些,因为语法分析器会很单纯地处理单引号串
处理双引号串会慢些,因为会对其内部的东东进行解析

文章目录
  1. 1. smarty 的转义
    1. 1.1. escape: ‘html’
    2. 1.2. escape: ‘url’
    3. 1.3. escape: ‘javascript’
    4. 1.4. escape: ‘mail’
    5. 1.5. escape: ‘quotes’
  2. 2. 双引号串 vs. 单引号串