2010-12-22 5 views
0

私のウェブサイトは検索エンジンです。変数を使用するとPHPのハイフン問題

私が持っている私の.htaccessファイルで:

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

そして、私のリンク構造は、ハイフンを使用して​​です。私は世界 /results/news.php?name=hello を検索する場合

私は/news/hello-world.html を使用する場合よりも、異なる結果を得る検索が検索されているようです

スペースの代わりにhypensを使用してhello-worldの場合は、+記号を使用して簡単に解決できますが、ハイフンを使用します。誰もそれを行う方法を知っていますか? I場合

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)を実行します。

関連する問題