PHP解析XML异常问题解决 [PHP]

post by 朦朧中的罪惡 / 2010-6-10 10:38 Thursday

今天在调试emlog工具箱导入rss文件时php报错

内容为

Char 0x0 out of allowed range in Entity

Google搜索相关资料无果。郁闷了半天,后来突然想到Char 0x0,觉得这个应该是rss文本中含有非法的字符而导致xml解析失败.

查询了w3.org的xml字符范围 之后

上面定义了有效的uncode字符范围:

Char       ::=       #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

虽然0x0可以存在于utf-8文件中,但是0x0很明显不在上面规定范围之内

那么我只需要把文档里面不符合上面标准的字符过滤掉应该就能解决这个问题

php函数如下

点击查看原图

在解析xml之前使用该函数来过滤掉非法字符,就能解决xml解析异常的问题了

参考资料

Invalid XML Characters: when valid UTF8 does not mean valid XML

标签: php 原创 疑难杂症

PHP识别url重写请求 [PHP]

post by 朦朧中的罪惡 / 2010-6-9 10:28 Wednesday

现在很多PHP程序都使用了url重写技术来优化url,但是有时候我们要在PHP程序中区分默认url的请求和url重写后的请求,这该如何处理呢?

我的解决方案是在常量$_SERVER里面找答案,在不同的服务器中$_SERVER都会有一个索引用来记录重写请求访问重写之前的路径

根据我的测试,部分主流服务器的索引如下

IIS7 + Rewrite Module -> $_SERVER['HTTP_X_ORIGINAL_URL']

IIS6 + ISAPI Rewite -> $_SERVER['HTTP_X_REWRITE_URL’]

Apache2 -> $_SERVER['REQUEST_URI’] 或 $_SERVER['REDIRECT_URL']

nginx -> $_SERVER['REQUEST_URI’]

有了这个参数,我们就可以在PHP中来判断请求url来自于重写地址的还是默认格式的地址了

标签: php 原创

完全开启Eclipse代码自动提示(包括变量名称) [软件应用]

post by 朦朧中的罪惡 / 2010-6-8 18:03 Tuesday

eclipse在默认状态下只会在输入.之后启动代码自动完成,在输入其他字符例如变量的时候却没有提示,这点非常不爽,研究了下eclipse的自动完成机制,发现默认配置只有.这个一个字符,难怪其他的字符不会触发了,如果要输入字符就要触发那么我们就要加上.abcdefghijklmnopqrstuvwxyz(,保证主要输入就会触发自动完成。

具体配置步骤如下:

Windows -> Preferences -> Java -> Editor -> Content Assist

选中 Enable auto-activation 选项

Auto activation delay 设置为0

Auto activation triggers for Java 设置为1

Auto activation triggers for Javadoc 保持默认

点击查看原图

点击Apply  -> OK,再输入代码试试

标签: 享受编程 环境配置

PHP上传带有单引号文件名的文件导致文件名被截断的bug [疑难杂症]

post by 朦朧中的罪惡 / 2010-6-7 10:00 Monday

新发现一个PHP的文件上传bug,bug描述如下:

触发条件:

PHP版本 < 5.3

PHP魔法引用开启

如果你上传一个叫做lalalala'gagaga.txt的文件,那么在服务器端接收到的时候,文件名就会从引号处被截断,名字变成gagaga.txt

$_FILES数组测试参数如下图:

点击查看原图

bug分析:

导致这个问题的原因是由于魔法引用功能转义单引号触发,

如果默认路径是c:\tmp\lalalala'gagaga.txt

那么经过魔法引用后就变成了c:\\tmp\\lalalala\'gagaga.txt

如果你使用basename函数打印这个字符串,就会得到'gagaga.txt

解决方案:

1.关闭你PHP的魔法引用功能

2.升级你的PHP到5.3版本,在5.3中这个问题已经修复

3.如果上面两个方案你都无法办到,那么下面是兼容方案

在你上传的表单里面增加一个隐藏域用于存储文件名称,选择文件后使用JavaScript取得文件名并将其存储在隐藏域中

例如:

<form name="imgform" method="post" action="upload.php" enctype="multipart/form-data">
   <input type="hidden" name="userfilename" id="userfilename">
   <input type="file" name="userfile" id="userfile" size="64" maxlength="256" onChange="javascript:top.document.imgform.userfilename.value= top.imgform.userfile.value">
</form>

然后在服务器端做相关处理

点击查看原图

这个问题在05年就有人发现了,不知道为啥PHP开发组一直没有修复这个bug

参考资料

标签: php 疑难杂症

Eclipse代码暗色代码配色第二季 [杂七杂八]

post by 朦朧中的罪惡 / 2010-6-7 9:58 Monday

先前发过两套eclipse的配色主题 ,反响不错。最近又在网上找到了5套eclipse的暗色代码主题,不敢独享,上传分享之

截图环境参数

操作系统:ubuntu 10.04

字体:Monaco 11px

Eclipse版本:3.5

主题压缩包下载

主题:wombat

点击查看原图

主题:ink opt

点击查看原图

主题:twilight

点击查看原图

主题:ricin

点击查看原图

主题:vibrant ink

点击查看原图

所有主题的epf文件在附件的压缩包中,下载后导入即可看到效果。

附件下载:
theme.zip 6.16KB

标签: 享受编程 eclipse 代码配色

64位ubuntu安装QQ for linux 笔记 [Linux]

post by 朦朧中的罪惡 / 2010-6-5 18:34 Saturday

腾讯的QQ for linux是的著名的烂尾工程 ,烂归烂,咱在linux下面还是得用它,咱装的64位ubuntu,而这QQ默认只能跑在32位的系统上,没办法,找办法把它折腾到64位系统上吧:

首先下载附件中的两个文件并解压缩

解压缩scim32.tar.gz

在命令行运行以下语句

sudo cp im-scim.so /usr/lib32/gtk-2.0/2.10.0/immodules/

sudo cp im-scim-bridge.so /usr/lib32/gtk-2.0/2.10.0/immodules/

然后再解压缩gtk.immodules.32.tar.gz

在命令行运行以下语句

sudo /usr/bin/gtk-query-immodules-2.0 > gtk.immodules.32

运行完毕之后

强制安装QQ for linux的deb包

命令为

sudo dpkg -i --force-all linuxqq_v1.0.2-beta1_i386.deb

到这里QQ就安装成功了,可以顺利启动和聊天,本人已亲自测试。

附一个QQ for Linux自动退出的解决方案

在命令行运行

sudo gedit /usr/bin/qq

在最后一行增加

export GDK_NATIVE_WINDOWS=true

保存后即可解决QQ for Linux自动退出的问题

参考资料:

QQ官方版在64位下不能输入中文的解决办法

调整 QQ for Linux 的小技巧

附件下载:
gtk.immodules.32.tar.gz 688字节
scim32.tar.gz 73.73KB

标签: 环境配置 linux ubuntu 疑难杂症

使用Google SSL搜索的解决方案 [疑难杂症]

post by 朦朧中的罪惡 / 2010-6-2 22:09 Wednesday

Google前不久推出了SSL搜索,有了SSL咱就不怕某WALL了(现在用普通搜索撞上的几率非常高了)

但是切换到SSL搜索的步骤很麻烦:步骤如下

先访问:http://g.cn

再访问:http://www.google.com/ncr

再访问:https://www.google.com

现在找了一些比较好的快捷解决方案

1.使用短网址http://ggssl.com 直接访问Google SSL搜索主页,不需要繁琐的跳转操作,在此感谢大牛张宴 为咱们提供这个网址

2.安装Firefox Google SSL 搜索插件,在搜索框就能使用Google的SSL搜索

最后,当然是 FUCK GREATE FIRE WALL

标签: 疑难杂症

Android模拟器运行速度很慢的解决办法 [Android]

post by 朦朧中的罪惡 / 2010-6-2 12:44 Wednesday

Android 模拟器默认情况下运行的速度又慢又卡,时长导致电脑CPU100%.

上网搜索解决方案,发现有人已经提交这个问题 到了Android官方

目前的解决方案是:

关闭模拟器自动侦测手机旋转的设置

具体位置为:设置 - 声音和显示 - 关闭“方向”的选项

点击查看原图

设定后模拟器运行速度明显提升了很多

标签: Android Gphone 疑难杂症

Android开发笔记2010.05.28 [Android]

post by 朦朧中的罪惡 / 2010-5-31 22:13 Monday

目前在研究Android开发,下面是一些问题笔记

代码版本控制的注意事项:

以下文件夹不要加入版本控制

bin:bin是编译的二进制文件的存放路径

gen:gen是Android需要的资源文件的源文件存放的目录

使用svn的时候要注意项目编译的问题 :

在编译的时候程序会把src文件夹里面的文件拷贝到Bin里面,但是svn是每个文件夹里面都包含一个隐藏的.svn文件夹的,这样就会导致编译的时候把.svn拷贝进不要控制的目录,导致版本控制错乱。因此,我们需要在项目的bulidpath -> Source 编辑src的Excluded属性,添加**/.svn/**以忽略svn文件夹。

当然了,如果使用git或者mercuial这些新一代的版本控制工具就没这个问题了

R.java丢失重建的方法

右击工程 -> 选择Android Tools -> 选择Fix Project Properties

如果以上方法不行,可以尝试

右击工程 -> 选择Properties -> 选择 Android -> Apply

标签: Android

将virtual box虚拟机硬盘镜像转换为vmware硬盘镜像 [杂七杂八]

post by 朦朧中的罪惡 / 2010-5-27 22:24 Thursday

Virtual box是一款不错的免费虚拟机软件,但是它在我的4核CPU4G内存的工作站下运行ubuntu却然非常非常的卡!

被逼无奈的我只好将虚拟机更换为速度更快的vmware,因为我的工作环境已经在虚拟机中配置完整,重现安装和配置一次系统太耗费时间了,所以将virtual box上安装的ubuntu无缝的转移到vmware上面,就是我要解决的问题。

主体思路:将virtual box的硬盘镜像转换为vmware的,下面是操作步骤

虚拟机软件版本:virtual box 3.2 和 vmware workstation 6.1

使用virtual box的磁盘工具将linux的磁盘文件转换为vmware能识别的格式

在virtual box的安装目录下有个程序叫做 vboxmanage

我们可以使用以下命令来实现转换

vboxmanage clonehd 路径A/xxx.vdi 路径2/xxx.vmdk –format VMDK

运行界面参见下图

点击查看原图

转换完毕后,我们安装vmware,然后从命令行进入vmware的安装目录

vmware同样提供了一个程序 vmware-vdiskmanage 来转换虚拟硬盘

我们可以使用下面的命令来转换刚才virtual box转换出来的那个vmdk文件

vmware-vdiskmanager -r 路径a/xxx.vmdk -t X 路径B/xxx.vmdk

注意命令中的那个X 的值需要用以下的数字来代替,根据自己的情况自行选择

0 : 做成文件(容量慢慢增加的)
1 : 将硬盘分割切成2GB一个文件
2 : 硬盘实际大小(容量为虚拟硬盘大小)
3 : 将硬盘分割切成2GB一个文件(总容量为虚拟硬盘大小)
4 : 配置成ESX的格式

运行界面参见下图

点击查看原图

耐心等待后,转换就完成了,在vmware中新建虚拟机时选择刚才转换好的硬盘文件,启动虚拟机

继续你的虚拟机之旅吧

参考文章:

VirtualBox to VMware轉換之旅…

标签: 环境配置 虚拟机

1 2 3 4 5 6 7 8 ... »