共1页 第1页 PHP5.3.x闹的正则表达式ereg问题的解决
升级到PHP5.3.5了,连接数据库应该快了(起码是心理上的)
但是有个可恶的问题接踵而至,PHP从5.3开始不支持ereg系列正则表达式函数了。
不只我爱用ereg,连一些成品软件比如phpmyadmin等都用的,
看官方说明,说建议改成preg,但是Perl形式的表达式和POSIX的多少还是有些区别的,可不是直接查找替换那么简单。
于是想自己写几个函数吧,自动把表达式翻译过来再说,谁知 function ereg()定义时又出错,说重复定义了。
真是没有天理,你不用还不准我用,于是再度妥协,
定义了一系列m_ereg这样的函数,全部写到ereg.php中。
遇到不兼容的脚本,前面加上<? include("ereg.php");?> 后面查找替换ereg换成m_ereg 等就是了,起码减少点工作量。
ereg.php的全文如下:
<?
function chgreg($reg)
{
$nreg=str_replace("/","\\/",$reg);
return "/".$nreg."/";
}
function m_ereg($reg,$p)
{
return preg_match(chgreg($reg),$p);
}
function m_eregi($reg,$p)
{$nreg=chgreg($reg)."i";
return preg_match(chgreg($reg),$p);
}
function m_ereg_replace($reg,$mix,$str)
{
$nreg=chgreg($reg);
$rst=preg_replace($nreg,$mix,$str);
return $rst;
}
?>
主要兼容了ereg、eregi、ereg_replace三个函数,其他不常用的也就算了。
阅读次数:7542 2011-3-7 13:41@0
续1
续写:PHP5.3.x闹的正则表达式ereg问题的解决
有个phpmyAdmin出了不支持mcrypt的警告信息
于是想弄个mcrypt装上,找到了 mcrypt-2.6.7.tar.gz
在configure时又要libmcrypt 于是又找到了libmcrypt-2.5.8.tar.gz
编译好了再去mcrypt那里configure还是找不到,硬把/usr/local/lib下几个文件ln -s到/lib目录下通过
又要 mhash ,又去找了 mhash-0.9.9.9.tar.gz 装好,也是ln -s去了
终于装好了,重编PHP,加上--with-mcrypt完事。
具体有啥用说不好,起码PHPMyAdmin不再出警告信息了。 2011-3-7 14:48@0
续2
解决PHPmyadmin的不兼容问题
1、他们也用ereg函数了,用preg报哪个文件就把哪个文件改过来。
2、新PHP会自己给单引号加斜杠,导致phpmyadmin的提交SQL语句运行功能失效,懒得去找哪个文件了,
在libraries/common.inc.php里加上一段:
foreach ($_POST as $k0 => $v0)
{
$_POST[$k0]=stripslashes($v0);
}
强行改过来就是了。
2011-4-3 13:26@0
续3
续写:PHP5.3.x闹的正则表达式ereg问题的解决
又发现改的不彻底,PHPmyadmin非常变态的在POST数组的元素里面嵌套数组,
最多的嵌套四层还不止,忍无可忍写个递归来解决之:
function gpcon($s)
{
if (is_array($s))
{
foreach ($s as $k=>$v) $ns[$k]=gpcon($v);
return $ns;
}
else return stripslashes($s);
}
if ($_SERVER["REQUEST_METHOD"]=="POST") $_POST=gpcon($_POST);
2011-4-3 22:07@0 共1页 第1页 评论:
短信评论请编辑PL2329+空格+内容发送到037160599922
河南联通用户可直接编辑评论内容发送到10656006002112329
以上短信端口不另收取信息费。
发表评论:
|