将所有大写字符替换为小写,除了urlencoded字符串

时间:2013-04-08 09:44:09

标签: php redirect preg-replace preg-match

我在PHP中有一个非常简单的重定向,重定向到小写,由于我的共享服务器限制,我无法在.htaccess中执行此操作。

        if (preg_match('/[A-Z]+/', $url)){
        header("HTTP/1.1 301 Moved Permanently"); 
        header("Location: ".strtolower($url));
        exit;       
    }

但是在某些情况下.htaccess可能已经重定向了网址。所有这些案例都有urlencoded字符,即。 %7E。

所以我需要检查任何不是urlencoded char形式的大写字符,并用小写字符替换它们。

最糟糕(或者最好)的情况我不想尝试已经重定向的标题,我可以查看它是否已经在PHP中重定向。

关于我如何能够解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:0)

您可以做的就是解码网址以删除urlencoded字符,然后使用strtolower(),然后对其进行编码:

header("Location: ". urlencode(strtolower(urldecode($url))));