0

私は mod_rewrite を使用しており、index.php?page=1 の代わりにコンテンツ管理システムに入力された About Us などのページ タイトルを使用しています。

だから俺にはルールがある

RewriteRule     ^pages/([A-Za-z0-9\-]+).php?$   index.php?page=$1                   [NC,L]  # Handle site navigation

これは URL www.domain.com/pages/About-Us.php として見栄えがよく、リクエストを www.domain.com/index.php?page=About-Us に送信します

ただし、URL エンコードではスペースにプラス記号が挿入されるため、About-Us を照会しても明らかに機能しません。照会する必要があるのは domain.com/About+Us.php

About-Us.php バージョンを使用したいのですが、スペースを + ではなく - で処理するために URL エンコードを取得するにはどうすればよいですか?

リッチ :)

4

1 に答える 1

4

urlencode()クエリ パラメータのみを対象としています ( の後に続くすべて?)。+URL のクエリ部分内の特殊文字であり、リテラル スペースを表します。リテラル+文字はパーセントでエンコードする必要があります。rawurlencode()は、他のすべての URL 部分を対象としており、スペースを としてエンコードしません+

一方、ダッシュは特殊文字ではなく、URL で直接表されます。

使用している CMS を指定していないか、独自のソリューションであるかどうかを指定していませんが、実際のページ タイトルの代わりに URL でスラッグを使用する必要があります。

ほとんどの CMS は、タイトルを小文字に変換し、スペースと句読点をダッシュ​​に置き換えることにより、作成時に各ページのスラッグを自動的に作成します。必要に応じて手動でオーバーライドできるように、このスラッグはデータベース内の実際のフィールドにするのが理想的です。ページへのリンクを生成するときは、スラッグを URL に含めます。ページのリクエストを受け取ると、タイトルではなくスラッグでデータベースを検索します。

于 2012-06-19T10:36:38.637 に答える