作者归档:admin

Javascript 中解析XML

通常在Javascript中做数据交换用的都是json也比较方便,但是这次碰到xml字符串解析。查了下,发现不同浏览器还不一样,解析起来倒也不难。

var txt='<?xml version="1.0"?><note>';
txt=txt+'<to id="to">Tove</to>'
txt=txt+'<from>Jani</from>';
txt=txt+'<heading>Reminder</heading>';
txt=txt+'<body>Don\'t forget me this weekend!</body>';
txt=txt+'</note>';
if (window.DOMParser)
{
  parser=new DOMParser();
  xmlDoc=parser.parseFromString(txt,"text/xml");
}
else // Internet Explorer
{
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async=false;
  xmlDoc.loadXML(txt);
}
//获取to的文本值
var to_text=xmlDoc.getElementsByTagName('to')[0].childNodes[0].nodeValue;
//获取to的属性值
var to_id=xmlDoc.getElementsByTagName('to')[0].getAttribute('id');

如果有用到Jquery的话也可以使用$.parseXML(),然后就可以使用Jquery的选择器和方法了 继续阅读

PHP base64_decode 空格问题

php对一个base64_encode编码后的字符串通过url传递后进行base64_decode发现返回值是false。尝试将url传递后的值打印出来发现+都被换成了空格。上网查了下发现,对于通过application/x-www-form-urlencoded的HTTP传递值,+会被自动替换为空格。所以也有各种对base64编码进行扩充的,比如对+,/等符号进行替换的,以便HTTP传输。在php中需要将+号或空格做退还,比如简单的str_replace(‘ ‘,’+’,$str)或者在传输前做urlencode。
继续阅读

Jquery下清空表单FILE控件的值

有时编辑表单需要清除表单的值,使用Jquery的话就是$(this).val(”)或者$(this).attr(‘value’,”)就可以清空了,但是在ie 8下却不行。在网上找了下说是出于安全性的原因,不能在javascript中对FILE控件操作。解决方法是ie下用在身的克隆来替换掉,代码如下:

      if ($.browser.msie) {
            $('#file').replaceWith($('#file').clone());
      }
      else {
            $('#file').val('');
      }

ie下的安全性有时候很讨厌,比如说自定义FILE控件样式,非得点击在控件上选择文件才行,而不能使用javascript来代替。
继续阅读

PHP安全问题

乌云漏洞平台上发现很多开源PHP程序存在漏洞。大部分漏洞都是因为对PHP中的变量过滤不够严格和未转义造成,直接使用了$_GET,$_PUT,$_COOKIE传过来的值,造成了sql注入(sql injection)和跨站攻击(xss)。事实上这些漏洞完全可以避免的。
先说sql注入。通常注入情况发生在参数过滤不严谨和拼接sql,所以尽量不要用sql拼接,尽量使用PDO或Mysqli。 继续阅读

PHP 自动加载类

老的项目很多不规范,到处都是require/include_once。为了不再到处写require/include(_once)了,应该给项目写个自动加载器了,避免重复加载和建立规范。个人觉得require_once和require之间的性能差异不大,特别是开启了APC缓存后,手动加载和自动加载之间的差异也不大。关于APC缓存类文件有争议,建议阅读参考链接和相关评论。

function autoloader($class){
	if (class_exists($class, false) || interface_exists($class, false)) {//如果已存在就不需要了
            return;
    }
	$directorys = array(
            MVC_PATH.'/'.'library'.'/',
            MVC_PATH.'/'
    );
    $file = str_replace('_', '/', $class) . '.php';//对类命名进行文件路径解析映射
    foreach($directorys as $directory){
    	if(file_exists($directory.$file)){
    		require_once($directory.$file);
    		return;
    	}
    }
}
spl_autoload_register(autoloader);

继续阅读