PHP的json数据编译和解译,字符编码无关。
这里只就PHP5.2.0+以上版本而言,因为JSON扩展是自PHP5.2.0才开始引入的。早期版本没有默认引入。
json现在应用比较广泛,主要是由于ajax技术的原因。json可以很方便的传输具有属性的数据格式,方便前端进行解析处理,更好的将数据流量传输降低并且也能使前后端尽可能的分离。
貌似自06年开始我在做的项目如果客户不强烈要求的情况下,我都会使用UTF-8进行编码开发,UTF-8开发会有很多好处,比如前、后端数据传输很方便无须额外的编码开销,另外储存的字符也比较直观,虽然有数据容量的浪费,但在目前储存如白菜价的环境下,容量问题应该不大。
在使用UTF-8编码的时候,json_encode/json_decode可以很方便的处理(虽然编译后的数据中的中文看起来很怪异,但因为也不需要直接使用数据所以也无所谓),因为PHP自带的json扩展库只支持UTF-8编码。
但有的时候客户强烈选择使用GBK/GB2312进行编码的情况下,自带的json就应付不了了。所有涉及到中文的经过编译后会变成null。 更多 »
关于SQL注入的监测
网站被挂马,有一个方式就是对某个帐号进行提权操作,比如针对非管理用户提权至最高管理员的权限。
事后可以发现被提权的用户帐号,但检查经由哪个文件注入的是个麻烦的事情,特别是针对开源的文件结构比较复杂的程序来说。
以前有个思路,一直未实现,今天处理了一个,是针对Discuz!5.5(很老的一个版本了^^)的,处理思路就是事后诸葛亮。
PHP的Snoopy.class.php
使用PHP读取HTTP页面基本使用Snoopy,使用简单方便易用。
最近在使用过程中发现一些问题,读取某些服务器的时候会发现获取不到页面内容。
留意Snoopy的Header请求头的时候发现,对于HOST请求是类似
HOST: hostname:port
看代码,只要端口存在,就使用该方式发送请求。
但观察浏览器请求时发现如果端口为80的时候,会省略掉端口号。
按这个方式改造一下Snoopy的代码,加入判断端口号,如果端口号为80的情况下,则直接使用
HOST: hostname
否则使用
HOST: hostname:port
这样改写代码后上面的问题就解决了。
问题的原因不太清楚,呵呵,对于HTTP协议始终就是模棱两可一知半解,实用至上主义,问题解决就不管了。
另外,还有一个问题就是,自官方下载到的Snoopy.class.php的编码问题,这个文件使用的是“阿拉伯语(Windows)”进行编码的,至少在这个编码下查看没有乱码。
为了方便日后改写代码,我是利用阿拉伯语(Windows)打开,然后Copy无乱码的代码另存为UTF-8编码,方便日后更改处理。
使用fastcgi_finish_request提高页面响应速度
当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法.按照文档上的说法,此方法可以提高请求的处理速度,如果有些处理可以在页面生成完后再进行,就可以使用这个方法.
听起来可能有些茫然,我们通过几个例子来说明一下:
<?php echo '例子:'; fastcgi_finish_request(); /* 响应完成, 关闭连接 */ /* 记录日志 */ file_put_contents('log.txt', '生存还是毁灭,这是个问题.'); ?>
通过浏览器访问此脚本, 结果发现并没有输出相应的字符串,但却生成了相应的文件.由此说明在调用fastcgi_finish_request后,客户端响应就已经结束,但与此同时服务端脚本却继续运行!
更多 »
触摸计算机10年纪念
今天是俺接触计算机、接触网络的整整第10年。2000年9月11日,俺第一次接触计算机接触网络,那个时候的自己笨笨的看着花花绿绿的屏幕,无论如何都想象不到未来的日子,会靠这个小东西来维持生计^_^
始终觉得做一份工作可能首先是兴趣。 虽然当时未觉得,但现在回想起来,在我第一次接触计算机的时候就已经注定是靠他作为日后生计的工具了。最值得回味的是,记得刚开始接触的时候就被这个“聪明”的东西吸引了,踅摸着,这玩意儿为啥这么厉害?我能不能弄一弄呢?当时,买机器对于家境不是特别好的我来说几乎就是奢侈,所以大部分时间都用在学校机房里面了,学校机房速度慢但花费非常低,不过后来有一些限制了,就跑去学校附近的网吧,由于网吧平时上网相对贵,所以大多数我都选择通宵——“包宿”,跟寝室几个同学一起去,从晚上10点多左右到第二天早上7点左右,印象中好像是8元钱,别人一般是聊天或者玩游戏,我始终着迷于花花绿绿变来变去的网页,然后就想着法的琢磨,因为专业与计算机无关,加之也没有什么学习的途径,所以刚开始着实比较费劲,后来偶然发现浏览器居然有“源文件”,哈哈,这个东东很好,照葫芦画瓢,在记事本写代码,然后运行,看着表格变色、变换觉得特有成就感,后来知道了office了解了还有个做网页的工具FrontPage,写起来就更方便了,再后来突然发现还有能做动画的东东——Flash,像模像样的鼓捣起来竟也能做出当时觉得特有感觉的MTV,呵呵……
整整十年,想想都觉得有意思,想要写写其中的过程,却又发觉好像是流水帐,算了,不写了。
只觉得时间过得非常非常快,快的连自己都不敢相信……
路永远都是在前方,过去只是一个回忆,无论好与坏、得与失,都是值得未来做为谈资的素材。
10年纪念给自己纪念一下,虽然未达到曾经自己梦想的高度,却也觉得是个时间点,期待下个十年的今天会是我值得炫耀的日子^_^
jQuery处理同级事物的一个方式
呵呵,标题有点绕,不知道这样表达是否达意。其实就是同类型(级别)的事件触发的判断处理而已,还搞不明白?-_-!我的表达有问题,那就看下面的代码吧: 更多 »
更换了博客的风格
总想换个风格,但一直很懒,今天想好好休息一下,无聊中在一个网站看到一款主题还不错,就给安装上了。没做什么太大的修改——太懒。
另外因为时常 要发一些代码,因此终于安装了Syntax Highlighter and Code Colorizer for WordPress插件,现在页面的代码会好看一点点了。以前也安装过但觉得使用很麻烦,不过总看着那些乱乱的代码也挺闹心的,还是决定安装这款插件了。只是去掉了一些不常用到的语言。
安装这款风格也是因为原来的风格使用Syntax Highlighter and Code Colorizer for WordPress插件 的时候会有一些怪怪的显示问题,代码很乱。
新风格看起来还不错,先对付着吧,改天看到好看的再换,自己真的实在太懒了,不愿意动手做@_@
页面嵌入JavaScript脚本的URL“and”符号
在HTML页面中嵌入JavaScript脚本代码,如果代码内包含一些URL中的“and”符号(&),或者包含HTML元符号(用于输出结构的),如果不对javascript代码区进行注释声明处理,那么就不符合W3C标准当然也就不能通过w3c检测。
比如:
<script type="text/javascript">
var test='http://www.foudang.com/tag/?tag=%E5%81%87%E8%B4%A7&p=2';
</script>
是不可以的,但如果将 & 替换为 & 是可以通过w3c验证的,不过,由于javascript处理URL会将&认为是变量的间隔符,如果改为 & 那么实际上面的URL将会被处理为tag=xxx 和 amp;p=2。
这个时候可以使用注释声明:
<script type="text/javascript">
/* <![CDATA[ */
var test='http://www.foudang.com/tag/?tag=%E5%81%87%E8%B4%A7&p=2';
/* ]]> */
</script>
或者:
<script type="text/javascript">
//<![CDATA[
var test='http://www.foudang.com/tag/?tag=%E5%81%87%E8%B4%A7&p=2';
//]]>
</script>
都可以。
PS:事实上,我之前也有过“另类”的一种解决方法,对于HTML标签字符,我写到外部的js文件内;对于URL我就使用一个函数去构造,用起来也倒很方便,但现在看来有点弱智,呵呵。因为很早之前刚接触W3C的时候一味追求通过验证,根本没仔细研究过,为了标准而标准来着,这是很不好的一个方式……
看到一个人的博客想写的……
先说一段引子吧,我特喜欢用Opera,虽然还有一些不尽如人意的地方,但越来越喜欢上这个浏览器了。最爱用的功能就是RSS(Opera叫做网摘订阅功能),我订阅了n多的RSS列表,呵呵,大多数都是技术类的,毕竟现在信息量太大找也不好找,而且有的时候忙着也没空满网络乱翻,订阅这个时不时阅读一下挺好的^_^
话说,今儿读到一篇来自博客园的某位PHPer看样子应该是新注册博客园的,发了个博文具体名字不写了,反正是关于求3值最大数的函数的,不知道是自己写的还是转载的,反正函数是: 更多 »
五种开源协议的比较和说明
为了节省开发周期,大多都会选择一些开源的框架或者工具,涉及到好多好多,比如编辑器CKEditor(原来叫FCKeditor)就是使用GPL, LGPL and MPL协议,而经常用到的jQuery却是GPL和MIT。长久来除了对BSD了解外其他的确有点模棱两可,看到一篇文章介绍几种开源协议的说明感觉不错,摘下来留着学习…… 更多 »
常用HTTP状态代码和解释说明
来自 Google 的一篇帮助内容,略有修改。
如果向您的服务器发出了某项请求要求显示您网站上的某个网页,那么,您的服务器会返回 HTTP 状态代码以响应该请求。此状态代码提供了有关请求状态的信息,且为请求方提供了有关您网站和请求的网页的信息。
一些常见的状态代码为:
- 200 – 服务器成功返回网页
- 404 – 请求的网页不存在
- 503 – 服务器暂时不可用
以下提供了 HTTP 状态代码的完整列表。点击链接可了解详细信息。您也可以访问有关 HTTP 状态代码的 W3C 页来了解详细信息。 更多 »