文档章节

htmlspecialchars向后兼容,smarty也有这个问题

Nigel_2010
 Nigel_2010
发布于 2014/10/15 13:50
字数 487
阅读 9
收藏 0

PHP 5.4.3 环境中测试了一个在 PHP 5.2 环境下运行正常的程序,却发现本应正常提交一个中文字符串到数据库的代码却提交了一个空字符串,经过排查,该字符串在经 htmlspecialchars 函数转义之前正常,而在转义之后却变成了空字符串。调用例子如下:

$str = '中文字符串';
$str_converted = htmlspecialchars($str);
echo $str_converted;


遂查看PHP手册,获知 htmlspecialchars 函数原型如下:

string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = 'UTF-8' [, bool $double_encode = true ]]] )

更新日志里面又有提到:

5.4.0 The default value for the encoding parameter was changed to UTF-8. 
5.4.0 The constants ENT_SUBSTITUTE, ENT_DISALLOWED, ENT_HTML401, ENT_XML1, ENT_XHTML and ENT_HTML5 were added.

PHP 从 5.4.0 版本开始第三个参数字符串编码的默认值改成了 UTF-8,而我这段代码中的中文编码正好是 GB2312 编码的,跟现在的默认参数不一致,于是更改调用参数如下:


# 为了与旧环境兼容,这里第二个参数没有组合使用 PHP 5.4 新加入的 ENT_HTML401 常量

$str = '中文字符串';
$str_converted = htmlspecialchars($str, ENT_COMPAT ,'GB2312');
echo $str_converted;

这样,“中文字符串”就可以正常显示了。为了使 PHP 5.4 之前环境中编写的代码能够向前兼容,建议调用 htmlspecialchars 函数的的时候都提供字符串编码参数。



ps:以上问题,在Smarty2.6版本中也有,在php版本5.4以上,就会出错。如果不能升级smarty,就手动修改

smarty/plugins/shared.escape_special_chars.php   中的 

$string = htmlspecialchars($string);


© 著作权归作者所有

Nigel_2010
粉丝 0
博文 5
码字总数 1890
作品 0
昌平
程序员
私信 提问
原创:在ECShop中使用TQEditor

整个过程共4个步. 第一步: 下载TQEditor V2.2.5版 下载网址http://www.e512.net/tqeditor 第二步: 解压文件到 [网站主目录]/tqeditor/ 第三步: 在根目录添加文件 tqeditoruploadimage.php --...

litqqs
2012/01/20
0
0
php5.4后htmlspecialchars输出为空的问题

从旧版升级到php5.4,恐怕最麻烦的就是htmlspecialchars这个问题了!当然,htmlentities也会受影响,不过,对于中文站来说一般用htmlspecialchars比较常见,htmlentities非常少用到。 可能老...

mickelfeng
2018/05/16
0
0
php5.4后htmlspecialchars输出为空的问题

从旧版升级到php5.4,恐怕最麻烦的就是htmlspecialchars这个问题了!当然,htmlentities也会受影响,不过,对于中文站来说一般用htmlspecialchars比较常见,htmlentities非常少用到。 可能老...

JK_OPERA
2015/04/16
0
0
构建mvc框架学习

做了那么久PHP开发,开始尝试去做一个简单的mvc框架。 一、首先确定目录结构 由于不太想弄得太复杂的结构,因此,将所有的目录存放于libs中,项目根目录只留一个index.php以及config.php,形...

AlpherJang
2016/03/03
89
0
php htmlentities和htmlspecialchars 的区别

很多人都以为htmlentities跟htmlspecialchars的功能是一样的,都是格式化html代码的,我以前也曾这么认为,但是今天我发现并不是这样的。 The translations performed are: 代码如下: '&' ...

tianhuahua
2013/10/01
142
0

没有更多内容

加载失败,请刷新页面

加载更多

MySql双主架构原理

在企业中,一般系统架构的瓶颈会出现在数据库这一部分,mysql主从架构在很大程度上解决了这部分瓶颈,但是在mysql主从同步的架构也存在很多问题;比如:1.关于数据写入部分(也就是主库)往往很难做...

xiaomin0322
10分钟前
0
0
分布式系统中一致性哈希

问题场景 近年来B2C、O2O等商业概念的提出和移动端的发展,使得分布式系统流行了起来。分布式系统相对于单系统,解决了流量大、系统高可用和高容错等问题。功能强大也意味着实现起来需要更多...

Java领航员
11分钟前
0
0
接口限流算法:漏桶算法和令牌桶算法

漏桶算法 漏桶可以看作是一个带有常量服务时间的单服务器队列,如果漏桶(包缓存)溢出,那么数据包会被丢弃。这一点和线程池原理是很相似的。 把请求比作是水,水来了都先放进桶里,并以限定...

铁骨铮铮
18分钟前
0
0
Android 生成二维码工具类

/** * 生成条形码和二维码的工具 */public class ZXingUtils { /** * 生成二维码 要转换的地址或字符串,可以是中文 * * @param url * @param width ...

lanyu96
24分钟前
0
0
谈谈lucene的DocValues特性之SortedNumericDocValuesField

前面已经介绍过NumericDocValuesField,这里想强调一下SortedNumericDocValuesField是针对同一篇文档中一键多值的情况进行排序的,换句话说不同文档的同一字段值可以乱序。核心的写入流程与谈...

FAT_mt
32分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部