2016-09-16 19 views
0

私は問題があります。 mod_rewriteを使用してURLの名前を変更していますURLをmod_rewrite経由で使用し、MySQLデータベースを照会

%20の代わりにスペースを含めるようにURLを再フォーマットするまで、すべて正常に動作しています。

site.com/page.php?country=abc&region=d e f&city=gh i 

site.com/abc/d-e-f/gh-i/ 

現在、私はこの

if (isset($_GET['country'])) {$country = str_replace('-', ' ', $_GET['country']);} 
if (isset($_GET['city'])) {$city = str_replace('-', ' ', $_GET['city']);} 
if (isset($_GET['region'])) {$region = str_replace('-', ' ', $_GET['region']);} 

をしています例えば、データベースを照会するとき、私はその後、正常に戻って変換する:いくつかの都市の両方を使用するよう

str_replace(' ', '-', $_GET['city']) 

しかし、これは問題を作成しましたスペースAND a - 。 サン・アンドレ・レユニオン島

最初は元のSQLクエリの実行について考えましたが、0の結果が返された場合は、str_replacingのスペースが - でクエリを再実行する前に。しかし、これは市が含まれている場合にのみ修正されます - 0スペースたとえばSaint-andre

$sql2 = "SELECT `name`, FROM `list` WHERE country = '$regionCode[0]' AND admin1 = '$regionCode[1]' AND admin2 = '$regionCode[2]' AND city = '$city' ORDER BY 'moddate'"; 

これを処理する最善の方法は何ですか?代わりに二重ダッシュを使用し、これを別に処理する必要がありますか? EG サン・アンドレ・レユニオン島またはもっと良い方法がありますか?

ありがとう

+1

しばしば、URLに人間が判読できるスラッグを含むサイトにも整数IDが含まれます。そのスタイルでは、サーバーサイドのスラッグを完​​全に無視し、idに基づいてクエリを実行します。重複した都市名の問題を回避することができます。 –

+0

サムのおかげで、別の選択肢でしたが、私はIDフィールドの使用を避けることを望んでいました –

答えて

0

ダブルダッシュオプションを使用して機能を作成することを決めました。私はまだ良い選択肢があれば他の提案を歓迎します:)

私は以下で使用しているコード。

// URL Database conversion class 
function QueryConversion($url) { 
$url = str_replace('--', '*', $url); 
$url = str_replace('-', ' ', $url); 
$url = str_replace('*', '-', $url); 
return $url; 
} 

// URL conversion class 
function URLconversion($url) { 
$url = str_replace('-', '--', $url); 
$url = str_replace(' ', '-', $url); 
return $url; 
} 

if (isset($_GET['country'])) {$country = QueryConversion($_GET['country']);} 
if (isset($_GET['region'])) {$region = QueryConversion($_GET['region']);} 
if (isset($_GET['city'])) {$city = QueryConversion($_GET['city']);} 
関連する問題