2010-12-22 6 views
0

내 웹 사이트는 검색 엔진입니다. 내 htaccess로 파일에서변수를 사용할 때 PHP 하이픈 문제가 발생했습니다.

나는이 :

RewriteRule ^news/(.*)\.html$ /results/news.php?name=$1 

그리고 내 링크 구조는 /news/what-is-up.html 사용하여 하이픈입니다. 나는 세계 /results/news.php?name=hello 를 검색 할 때

나는 /news/hello-world.html 를 사용할 때와는 다른 결과를 얻을 수 검색이 검색 것 같다

공백 대신 하이픈을 사용하는 hello-world의 경우 + 기호를 사용하여 쉽게 해결할 수 있지만 하이픈을 사용하고 싶습니다. 아무도 그것을하는 방법을 알고 있습니까? 나는 경우

if ($q != '') { 
    header('Location: http://'.$_SERVER['SERVER_NAME'].'/news/'.toAscii($q).'.html'); 
    die(); 
} 
else 
{ 
    header('Location:http://'.$_SERVER['SERVER_NAME'].'/news/'); 
    die(); 
} 

감사

+0

하이픈 대체 용 코드 블록은 어디에 있습니까? 나는 당신의 재 작성 규칙에 문제가 있다고 생각하지 않는다. /results/news.php?name=hello-world는 /news/hello-world.html과 동일한 결과를 산출해야합니다. – Simon

+0

키워드는 urldecode()이지만 '+'기호에 대해서만 작동합니다. – Simon

+1

누군가가 실제로'hello-world'가 아니라'hello world'를 찾고 있다면 어떨까요? – Gumbo

답변

0

:

function toAscii($str, $replace=array(), $delimiter='-') { 
if(!empty($replace)) { 
    $str = str_replace((array)$replace, ' ', $str); 
} 

$clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str); 
$clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean); 
$clean = strtolower(trim($clean, '-')); 
$clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean); 

return $clean; 
} 

내 검색 엔진이 같은 HTTP 위치를 사용

내가 친화적 인 URL에 이름 변수를 변환하는 데 사용하는 코드입니다 하이픈을 공백으로 대체하기 전에 str_replace를 올바르게 사용하여 검색에 제출했음을 이해했습니다.

$search_term = str_replace("-", " ", $incoming); 
+0

일시적으로 문제가 해결되었지만 위의 설명에 나와있는 것과 같은 문제가 있습니다. 감사. – Peibol

+0

나는 get 문자열을 통해 들어오는 vars가 urlencoded 될 것이므로 hello world가 hello % 20world로 나타날 것이므로 우선 사용자가 공백을 입력했을 때를 대비하여 var를 urldecode()해야한다고 생각합니다. – Cups

0

다시 쓸 때마다 단어 분할을 처리해야합니다.

당신이 할 수있는 것은) /(.*

한다 RewriteRule^소식이 있습니다. HTML $ /results/news.php?name=$1 & 재 작성 = 사실

및 $ _GET [ 'rewrite']가 있으면 str_replace ("-", "", $ incoming)

관련 문제