値を変更せずに取得する必要がある場合は、エスケープを使用する必要があります。URLクエリパラメータ値では、スペースは+
またはとしてエンコードされる場合があります%20
。mod_rewriteは、外部バージョンが適切にスペルされている限り、通常これを行います。
URLの外部バージョンでは、%20のみを使用できます。
http://www.store.com/products/CD%20s-Dvd%20s
http://www.store.com/products.php?category=CD%20s-Dvd%20s
URLパス部分のa+
は、文字通りプラスを意味するためです。
(そこにスペースが必要ですか?スペースのない「CD-DVD」の方が良いタイトルのようです。)
パス部分からパラメータまで任意の文字列を取得することは簡単ではありません。エスケープの問題とは別に、パス部分の/
ようにエンコードする必要がある、の問題があります。ただし、Apacheは、セキュリティ上の理由から%2F
、デフォルトでを含むすべてのURLをブロックします。%2F
(\
Windowsでも同様に影響を受けます。)構成を使用してこの動作をオフAllowEncodedSlashes
にすることができますが、ポータブルにしたい場合は、カテゴリ名として「CD/DVD」を使用できないことを意味します。
このため、また%20
URLに大量のsを含めるのは少し醜いので、文字列は通常、URLに配置される前に「スラッグ」に変換されます。ここで、目に見える%エスケープをもたらすすべての競合するASCII文字はハイフンやアンダースコアなどのフィラー文字に置き換えられました。これは、文字列をラウンドトリップできないことを意味します。そのため、特定のスラッグに適切なエンティティを検索できるように、データベースに別のタイトルとスラッグを保存するか、URLで追加のIDを使用する必要があります。 (Stack Overflowのように)。