PHP 函数 htmlspecialchars 使用心得

  最近在工作中发现了一个有趣的问题,因为之前在使用 htmlspecialchars 函数对 单、双引号 等容易造成SQL注入的敏感字符进行处理时,都是直接将要处理的数据作为参数传入该函数即了事。因为之前从网络中众多blog以及各类在线手册(如 W3CSchool)中查询 htmlspecialchars 的特点时,大都会得到这么一个“结论”:htmlspecialchars 函数把一些预定义的字符转换为HTML实体,预定义的字符是:

    & (和号) 成为 &

    " (双引号) 成为 "

    ' (单引号) 成为 '

    < (小于) 成为 &lt;

    > (大于) 成为 &gt;

  然而在实际应用过程中,发现事实并非完全如此:如果仅向 htmlspecialchars 函数中传入第一个参数,也就是可能包含符合“预定义字符”的待处理字符串,则 htmlspecialchars 仅会处理 &、"、< 和 > ,而唯独不会处理 ' 单引号,感兴趣的朋友可以试验一下。

  查阅PHP手册后,发现上面赫然写着:

    The translations performed are:

      '&' (ampersand) becomes '&amp;'

      '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.

      "'" (single quote) becomes '&#039;' only when ENT_QUOTES is set.

      '<' (less than) becomes '&lt;'

      '>' (greater than) becomes '&gt;'

  也就是说,只有在调用 htmlspecialchars 函数时,主动传递了第二个参数,且是 ENT_QUOTES 时(第二个参数如没有传递,则默认是 ENT_COMPAT:Will convert double-quotes and leave single-quotes alone.),单引号才会被转义为HTML字符实体。

  顺便说一下,由于对PHP手册中参数含义的理解有误:ENT_QUOTES:Will convert both double and single quotes我对这个解释的理解是:当传入的第二个参数是 ENT_QUOTES 时,仅会转义双引号和单引号为HTML字符实体,而不会转义剩下的预定义字符 &、< 和 > )。其实,只需要传递第二个参数 ENT_QUOTES ,以 htmlspecialchars($str, ENT_QUOTES); 形式调用,即可转义全部预定义字符串。

转载于:https://www.cnblogs.com/MyRobotDream/p/3480082.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值