欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

PHP 5.4 中经 htmlspecialchars 转义后的中文字符串为空的问题 有大用

shiping1 的头像

PHP 5.4 中经 htmlspecialchars 转义后的中文字符串为空的问题

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 常量
//下面把GB2312 改成 GBK 好像不行, 还是为空 这里必须是 GB2312
$str_converted = htmlspecialchars($str, ENT_COMPAT ,'GB2312');
echo $str_converted;

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

参考: http://php.net/htmlspecialchars

来自 http://lodar.net/chinese-string-become-empty-after-htmlspecialchars-converted-in-php-5-4/



php5.4+在htmlspecialchars转义中文的时候将中文转义为空了,做了一个项目找了一天的bug,原来是php5.4 的htmlspecialchars函数有了新特性了,下面的解决方案来源于网络

$oldword = '网站制作学习网';

$newword = htmlspecialchars($oldword);

echo $newword;

结果显示输出为空

在我本地测试的时候 php5.3.8

$oldword = 'htmlspecialchars转换字符串为空么?网站制作学习网';

$newword = htmlspecialchars($oldword);

echo $newword;

结果显示输出:htmlspecialchars转换字符串为空么?网站制作学习网

看网上的

获知 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 常量

$oldword= '测试新的php5.4 htmlspecialchars转换字符串为空么?网站制作学习网';

$newword = htmlspecialchars
搜索($oldword, ENT_COMPAT ,'GB2312');

echo $newword;

结果显示:测试新的php5.4 htmlspecialchars转换字符串为空么?网站制作学习网'

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

来自  http://zhidao.baidu.com/link?url=rjaUE99tdgLrtf50JMkHCik4i0CXIi71_CuCqlYw12LK6GQU8zHR393urkhd6xoPrgf...
普通分类: