这个问题有点复杂,因为我是PHP编码的新手。我的网站使用 utf-8 编码。
经过大量测试,我找到了一些解决方案。我使用这种代码:
function chr_conv($str)
{
$a=array with pattern('%CE%B2','%CE%B3','%CE%B4','%CE%B5' etc..);
$b=array with replacement characters(a,b,c,d, etc...);
return str_replace($a, $b2, $str);
}
function replace_old($str)
{
$a1 = array ('index.php','/http://' etc...);
$a2 = array with replacement characters('','' etc...);
return str_replace($a1, $a2, $str);
}
function sanitize($url)
{
$url= replace_old(replace_old($url));
$url = strtolower($url);
$url = preg_replace('/[0-9]/', '', $url);
$url = preg_replace('/[?]/', '', $url);
$url = substr($url,1);
return $url;
}
function wbz404_process404()
{
$options = wbz404_getOptions();
$urlRequest = $_SERVER['REQUEST_URI'];
$url = chr_conv($urlRequest);
$requestedURL = replace_old(replace_old($url));
$requestedURL .= wbz404_SortQuery($urlParts);
//Get URL data if it's already in our database
$redirect = wbz404_loadRedirectData($requestedURL);
echo sanitize($requestedURL);
echo "</br>";
echo $requestedURL;
echo "</br>";
}
当传入网址为:
/content.php?147-%CE%A8%
CE%AC%CF%81%CE%B9-%CE%BC%CE%B5-%CF%80%CF%81%CE%AC%CF%83%CE%B1%28%CE%A7%CE%BF%CF%8D%CE%BC%CF%80%CE%BB%CE%B9%CE%BA%29";
我得到:
/content.php?147-psari-me-prasa-choumplik
我只想要:
/psari-me-prasa-choumplik
没有 URL 之前的content.php?147-
。但最重要的问题是我得到无限循环而不是正确的 URL。
我做错了什么?
请记住,.htaccess
解决方案不起作用,因为我有一个lighttpd
服务器,而不是Apache
.
如果你需要
我假设并不总是需要跳过 ?147-。但总是在第一个连字符之后。在这种情况下,在回显之前添加以下内容:
$requestedURL = substr($requestedURL, strrpos( $requestedURL , '-') +1 );
这将搜索第一个连字符的位置并返回该位置,添加一个连字符,以便跳过连字符本身,并使用它来将连字符之后的$requestedURL字符串剪切到字符串的末尾。
如果它总是/content.php?127- 则用数字 17 替换 strrpos( $requestedURL , '-') +1。