VPS侦探论坛

 找回密码
 注册
查看: 5296|回复: 5

lnmp1.2_php5.4如何解决htmlspecialchars默认UTF-8的问题

[复制链接]
发表于 2015-9-23 11:07:10 | 显示全部楼层 |阅读模式

原来使用的是php5.2,升级php5.4后,因为php5.4的htmlspecialchars默认UTF-8,导致较老的程序无法截取gbk的字符或者输出为空的情况。网上有一些修改ext/standard/html.c的方法
  1. ext/standard/html.c
  2. line 372
  3. /* Default is now UTF-8 */
  4. if (charset_hint == NULL)
  5. return cs_utf_8;
  6. --->
  7. /* Default is now UTF-8 */
  8. if (charset_hint == NULL)
  9. return cs_8859_1;
  10. 解决htmlspecialchars默认UTF-8的问题。
复制代码

http://www.9enjoy.com/linux-upgrade-php54/


看得不是很明白,似乎是直接编译php,然后将一些文件复制过去就可以了。

所以请问下军哥,不重新安装的情况下,如何修改htmlspecialchars默认UTF-8为gbk


谢谢

[ 本帖最后由 dyunok 于 2015-9-23 11:19 编辑 ]
美国VPS推荐: 遨游主机LinodeLOCVPS主机云搬瓦工80VPSVultr美国VPS主机中国VPS推荐: 阿里云腾讯云。LNMP付费服务(代装/问题排查)QQ 503228080
发表于 2015-9-23 13:16:52 | 显示全部楼层


http://php.net/manual/en/function.htmlspecialchars.php
官网上该函数的说明,既然有默认值就可以更改默认值
Linux下Nginx+MySQL+PHP自动安装工具:https://lnmp.org
 楼主| 发表于 2015-9-23 17:46:10 | 显示全部楼层

查到比较多的方法,是安装前修改
/root/lnmp1.2-full/src/php-5.4.41/ext/standard/html.c
ext/standard/html.c
line 372
/* Default is now UTF-8 */
if (charset_hint == NULL)
return cs_utf_8;
--->
/* Default is now UTF-8 */
if (charset_hint == NULL)
return cs_8859_1;

然后编译安装,这个是安装方法http://www.9enjoy.com/linux-upgrade-php54/
下面是安装方法,但我不知lnmp的配置参数是什么样的
  1. ./configure --prefix=/usr/local/php5.4 --with-zlib --enable-bcmath --with-curl --with-curlwrappers --enable-mbregex --enable-mbstring --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-mysql --with-mysqli --with-pdo-mysql --enable-ftp --with-jpeg-dir --with-freetype-dir --with-png-dir --enable-fpm --with-fpm-user=www --with-fpm-group=www
  2. make ZEND_EXTRA_LIBS='-liconv'
  3. make install
复制代码

但我不想重新安装整个服务器,有没有简便的方法可以直接改哪个地方就可以了?
或者仅仅针对php仍按原来的方式及参数安装(配置参数不清楚),但lnmp不知如何只安装php
请军哥给个帮助,谢谢!

[ 本帖最后由 dyunok 于 2015-9-23 17:51 编辑 ]
美国VPS推荐: 遨游主机LinodeLOCVPS主机云搬瓦工80VPSVultr美国VPS主机中国VPS推荐: 阿里云腾讯云。LNMP付费服务(代装/问题排查)QQ 503228080
发表于 2015-9-23 20:11:23 | 显示全部楼层



lnmp1.2没法在安装前修改源码,修改了也会重新删除解压
你要按他们的方法修改就只能按别人的方法自己手动编译安装

我看网上很多都是修改程序而不是修改php源码
Linux下Nginx+MySQL+PHP自动安装工具:https://lnmp.org
发表于 2015-9-24 07:30:00 | 显示全部楼层

php 5.4  5.5 这个必需重新安装PHP才能解决。

php5.6 可通过修改 php.ini 中的  default_charset 值。 如改为 default_charset = cs_8859_15

你可以修改 升级php的脚本 ,  在解压后就加入替换脚本,也就是在 cd php-$php_version/ 这一行下加入。
sed -i 's/return cs_utf_8;/return cs_8859_15;/g' ext/standard/html.c   

注:也可改为cs_8859_15,GBK/UTF8 都支持。 但是如果php文件未指定编码,有时会出现乱码(如UC),不过一般程序文件头都设定了编码的。

加入这一行后,执行升级php 即可。

[ 本帖最后由 id886 于 2015-9-24 09:19 编辑 ]

军哥运维代购:http://shop63846532.taobao.com/

 楼主| 发表于 2015-9-25 20:35:01 | 显示全部楼层

谢谢两位,已经直接升级php5.4至5.6.13,修改了默认字符值。
升级后,感觉快了很多。php5.6不错呵。但尚不知是否还有其他问题。
但升级后,比如使用原来的搜索,旧有的上传程序,仍然存在无法将汉字保存在输入框的问题,但数字或英文就不会有这种情况。
看来,只能考虑修改程序了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|VPS侦探 ( 鲁ICP备16040043号-1 )

GMT+8, 2024-9-28 09:33 , Processed in 0.026655 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表