这个问题有点复杂,因为我是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
没有content.php?147-
之前的网址。
但最重要的问题是我得到ENDLESS LOOP而不是正确的URL。
我做错了什么?
请注意.htaccess
解决方案不起作用,因为我有lighttpd
服务器,而不是Apache
。
答案 0 :(得分:0)
如果您需要
我假设并非总是如此?147-你需要跳过。但总是在第一个连字符之后。在这种情况下,在echo之前添加以下内容:
$requestedURL = substr($requestedURL, strrpos( $requestedURL , '-') +1 );
这将搜索第一个连字符的位置并返回该连字符,添加一个以便跳过连字符本身,然后用它将连字符后的$ requestedURL字符串剪切到字符串的末尾。
如果它始终是/content.php?127-则将strrpos($ requestedURL,' - ')+1替换为数字17。