另一个eregi替换问题,用于网页导航

时间:2012-08-23 17:02:44

标签: php html preg-match eregi

我的主机最近将他们的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新闻页面。如果这样做会更好,我该怎么做才能使这项工作?

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

1 个答案:

答案 0 :(得分: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') { ... }