0

我的主机最近将他们的 PHP 更新到 5.3(没有警告),我现在必须在我的索引页面上替换我的页面导航代码。这是我目前正在使用的:

<? if (eregi(".shtml", $load)) {if (!@readfile("$load")) { readfile("error.shtml"); }  } if (!eregi(".shtml", $load)) {if (!@readfile(include("/home/content/j/p/l/jplegacy/html/coranto/news.txt") )) ;}?>

这是我在链接中用作导航的示例:

<a href="?load=archive/archive.shtml">Archive</a>
<a href="?load=about.shtml">About Us</a>

我研究了两种不同的技术,preg_match() 和 stristr()。

preg_match() 从 Coranto 输出我的错误页面和 news.txt 文件,但不会将我导航到上面链接中的页面。我可以在这里做些什么来完成这项工作?

stristr() 没有给我警告,但它不导航页面,只输出我的 Coranto 新闻页面。如果这会更好,我该怎么做才能完成这项工作?

我需要做什么来解决这个问题?我完全迷路了。:(

4

1 回答 1

0

ereg(i) 被认为已被弃用。您应该将 preg_match 用于正则表达式,因为 preg 比其他引擎更快。另外,如果你想以“.shtml”结尾,那正则表达式是错误的,你不需要求助于正则表达式。以 .shtml 结尾的是“^*.shtml$”。如果您确实选择使用 preg_match,所有 preg_match 正则表达式,如 perl,都被“/”(斜杠)包围,因此正确的正则表达式如下所示:

 preg_match("/^.*\.shtml$/", $load)

但是对于“以 .shtml 结尾”的更好解决方案。通常你不应该使用正则表达式,除非情况确实需要它们(它们比使用 substr 和匹配字符串的最后一部分要慢得多),像这样的简单匹配不符合条件。

 if (substr($test, sizeof($load) - 7, 6 )) == '.shtml') { ... }
于 2012-08-23T17:17:50.873 回答