【发布时间】:2011-09-23 04:39:45
【问题描述】:
我正在使用下载的 PHP 脚本来加速我的网站的开发,但我收到了一堆与 ereg 相关的“已弃用”消息。我将在上线前关闭警告,但我会尽量确保我先清除它们!
我找到了一个handy guide,它适用于简单的位,例如使用 / 和 /i 更改 preg_replace 的 eregi_replace,但我遇到了一些更高级的表达式(使用 cmets、串联、变量、大括号等等 - 有些是相同的类型,但我很困惑尝试和打破它!)。
当我更新以下内容时,谁能告诉我应该将 / 或 / /i 放在哪里,或者,同样欢迎,告诉我如何处理每种类型(或指向我的说明),以便我自己做?
eregi("<!--\ startBlock\(([^)]+)\)\ -->", $content["body"], $m)
eregi($reg, $content["body"], $m)
eregi("([^\.]+)\.(.*)", $variable, $m) ... I think (?) this is preg_replace("/([^\.]+)\.(.*)/i", $variable, $m)
eregi("{url:([^}]+)}", $txt, $m))
eregi_replace("{".$key."}", $val, $txt)
eregi_replace("{script}", $HTTP_SERVER_VARS["SCRIPT_NAME"], $txt)
eregi_replace("{ifNotSet:".$m[1].":([^}]+)}", "", $txt)
更新: 我似乎一切正常(感谢您的帮助),除了下面的一个功能,我无法弄清楚 preg 版本 - 我尝试了各种组合,但生成的页面从未给出与 eregi 版本相同的结果(使用错误行)。有什么建议吗?
function parse(&$content) {
while (preg_match("/<!--\ startBlock\(([^)]+)\)\ -->/i", $content["body"], $m)) {
$name = $m[1];
$block = array();
$block["name"] = $name;
$block["blocks"] = array();
$block["used"] = 0;
$block["values"] = array();
$reg = "<!--\ startBlock\(".$name."\)\ -->(.*)<!--\ endBlock\(".$name."\)\ -->";
if (!eregi("$reg", $content["body"], $m)) {
$this->error("block `".$name."' does not have startBlock() AND endBlock().");
}
$block["body"] = $m[1];
$content["body"] = eregi_replace("$reg", "{".$name."}", $content["body"]);
$content["blocks"][$name] = array();
$this->parse(&$block);
$content["blocks"][$name][0] = $block;
}
}
然后我将开始“调用时传递引用”,这似乎更棘手!
【问题讨论】:
标签: php regex preg-replace ereg