我的主机最近将他们的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新闻页面。如果这样做会更好,我该怎么做才能使这项工作?
我需要做些什么来解决这个问题?我完全迷失了。 :(
答案 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') { ... }