博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php 升级后 htmlspecialchars 返回空 的解决方案
阅读量:6091 次
发布时间:2019-06-20

本文共 1698 字,大约阅读时间需要 5 分钟。

今天将php版本升级到5.3.0以上(我升级到php5.4.13)的版本后发现一个问题 htmlspecialchars 函数返回为空。

查了资料后,发现新版本对htmlspecialchars这个函数做了修改,当本地字符集不是utf-8的时候,需要默认指定当前使用的字符集,否则就可能会出现返回为空的情况。详情可参考这个文章 http://ouyangxiaofei914.blog.163.com/blog/static/13357443320117493932444/
因为我的程序版本有可能工作在GBK或者utf-8两种环境下,所以得要兼容各种字符集,因此写了一个替换函数带代替htmlspecialchars带来的问题.

1
2
3
4
5
6
7
8
9
10
11
/**
 
* html字符串格式化(用于打印显示,替换掉html中的特殊字符)
 
* @param string & $sHtml 需要处理的html
 
* @return string
 
* */
public 
function 
toHtmlChars(
$sHtml
)
{
    
static 
$maEntities 
=
        
array 
(
'&' 
=> 
'&'
'<' 
=> 
'&lt;'
'>' 
=> 
'&gt;'
'\'' 
=> 
'&apos;'
'"' 
=> 
'&quot;'
, "\n"=>
'<br />'
' '
=>
'&nbsp;'
);
    
return 
strtr
(
$sHtml
$maEntities
);
}

 

可以使用 toHtmlChars()这个函数来代替系统htmlspecialchars()函数

其中如果 【"\n"=>'', ' '=>' '】这个不用的话以去掉(这个只是为了让输出美观一点)。

 

参考文章2:

 

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 编码的,跟现在的默认参数不一致,于是更改调用参数如下:

$str '中文字符串';
# 为了与旧环境兼容,这里第二个参数没有组合使用 PHP 5.4 新加入的 ENT_HTML401 常量
$str_converted = htmlspecialchars($str, ENT_COMPAT ,'GB2312');
echo $str_converted;

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

转载地址:http://cclwa.baihongyu.com/

你可能感兴趣的文章
SCVMM 2012 安装及绿色新功能介绍
查看>>
在oracle中常用到的一些命令
查看>>
应用交付工程师Troubleshooting经验分享2
查看>>
开发工具EVC的使用(-)
查看>>
命令模式(Command)解析例子
查看>>
别拿山寨机不当干粮
查看>>
我的jQuery动态表格插件二
查看>>
Windows API 函数列表 附帮助手册
查看>>
PIX多模式--虚拟化防火墙技术
查看>>
VSFTPD登录延迟后的随想
查看>>
构建自动化运维之基础设施—定制mysql的rpm包
查看>>
c++构造函数详解
查看>>
创建隐藏用户,偷窥他人私生活
查看>>
MVC3.0 中Razor 学习
查看>>
团队项目个人进展——Day01
查看>>
Yii 2 —— session
查看>>
烂泥:haproxy学习之https配置
查看>>
给C语言初学者的忠告——计算机达人成长之路(27)
查看>>
读官方指南经历Mysql5.6服务安装
查看>>
达观数据分析平台架构和Hive实践——TODO
查看>>