私は、次のような本のタイトルをリストする「きれいなリンク」または「パーマリンク」を扱う問題を解決しようとしています。
http://www.example.com/title/The-Catcher-in-the-Rye/
-
単純な単語やスペースなどの通常の本のタイトルを扱う場合は、スペースをダッシュに置き換えるだけで、逆の操作を行うことでデータベース内の本のタイトルを見つけることができるため、問題はありませんstr_replace
。
'
ただし、この例のように、アポストロフィまたはコロン:
、あるいはその両方を含む本のタイトルがある場合に問題が発生します。
Why Can't I Be You: A Novel
私のSQLデータベースでは、すべての一重引用符がエスケープされているため、データベースのエントリは次のようになります。
+-----+-------------------------------+
| BID | book_title |
+-----+-------------------------------+
| 1 | Why Can\'t I Be You: A Novel |
+-----+-------------------------------+
すべての本のタイトルをリストするとき、文字列を再度エスケープ解除するので、単純に次のようにリストされます。 Why Can't I Be You: A Novel
私の<a>
リンクは、次のようにスペースをダッシュに置き換え、アポストロフィとコロンを省略して作成されたきれいなリンクで、エスケープされていないタイトルを示しています。
<a href="http://www.example.com/title/why-cant-i-be-you-a-novel" title="Why Can't I Be You: A Novel">Why Can't I Be You: A Novel</a>
だから、私の問題に取り掛かる。フォーマットされた(エスケープされていない)本のすべてのタイトルを一覧表示し、ハイフン付きの「パーマリンク」/「きれいなリンク」を機能させて、適切なタイトルをGETメソッドに返すことができるようにしたいと思います。
私の.htaccess
エントリには、次のものがありますRewriteRule
。
RewriteRule ^title/(.*[^/])/?$ viewbook.php?booktitle=$1 [NC,L]
これが行うことは、続く「きれいな」リンク部分を取得し、title/
それをGET経由でに送信することviewbook.php
です。したがって、たとえば、The Catcher in the Ryeの場合、GETを介して次のように送信されます。The-Catcher-in-the-Rye
この問題を解決するのはphpで簡単なので、問題はありません。
$booktitle = $_GET['booktitle'];
$goodBookTitle = str_replace('-', ' ', $booktitle);
// or we can do it all at once
$booktitle = str_replace('-', ' ', $_GET['booktitle']);
// Send $booktitle to SQL query and find the book
これは、アポストロフィが見つからない場合は正常に機能しますが、タイトルにアポストロフィまたはコロンが含まれている場合は、データベースに見つからないため、この方法は役に立ちません。また、完全に一致する必要があるWHERE book_title LIKE '%$booktitle%'
ため、使用したくありません。viewbook.php
私は、aを介してこれを解決し、たとえばまたはRewriteRule
のためにデータベースにテーブルを追加する必要がない、エレガントまたはシンプルなソリューションを探しています。また、URLにシングルの%27などのアポストロフィを含めたくありません。引用。これは、データ入力がスプレッドシートで行われ、CSVにエクスポートされ、SQLデータベースにアップロードされる大規模なデータベースです。のようなものや同等のものを可能にする個々のエントリのフロントエンドはありません。slug
permalink
slug
私の説明が明確であることを願っています。