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识别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来自于重写地址的还是默认格式的地址了
完全开启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
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
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自动退出的问题
参考资料:
附件下载:
gtk.immodules.32.tar.gz 688字节
scim32.tar.gz 73.73KB
使用Google SSL搜索的解决方案 [疑难杂症]
post by 朦朧中的罪惡 / 2010-6-2 22:09 Wednesday
Google前不久推出了SSL搜索,有了SSL咱就不怕某WALL了(现在用普通搜索撞上的几率非常高了)
但是切换到SSL搜索的步骤很麻烦:步骤如下
先访问:http://g.cn
现在找了一些比较好的快捷解决方案
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开发笔记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中新建虚拟机时选择刚才转换好的硬盘文件,启动虚拟机
继续你的虚拟机之旅吧
参考文章:














