まず第一に、エスケープされた文字列をデータベースに格納するという考えは奇妙に見えます。 MySQLは任意の文字列を保存でき、バイナリシーケンスも安全に保存できます。
次に、実際のタイトルからきれいなURLへのマッピングとその逆について説明します。タイトルをURLに適した文字列に変換してから元に戻すというアイデアは、このような変換を元に戻すのが非常に難しいため、問題を解決する一般的な方法ではありません。この問題を解決する通常の方法は、URLに対応するように変更された本のタイトルを含む別の列をデータベースに含めることです。また、この列の値は一意にする必要があります。テーブルは次のようになります:
+-----+-----------------------------+----------------------------+
| BID | book_title | book_title_url |
+-----+-----------------------------+----------------------------+
| 1 | Why Can't I Be You: A Novel | why-can-t-i-be-you-a-novel |
+-----+-----------------------------+----------------------------+
この列でテーブルにインデックスを付け、book_title
の代わりに使用する必要があります viewbook.php
内のSQLクエリで このようなスクリプト:
SELECT * FROM books WHERE book_title_url='$booktitle'
$booktitle
の場所 $_GET['booktitle']
を介して受け取った本のタイトルが含まれています SQLインジェクションを防ぐために適切にエスケープしました。
したがって、きれいなURLはhttp://www.example.com/title/why-can-t-i-be-you-a-novel
のようになります。 そして、それらはApacheによってhttp://www.example.com/viewbook.php?booktitle=why-can-t-i-be-you-a-novel
のようなものに書き直されます。 。
繰り返しますが、これは通常、クリーンURLが実装される一般的な方法です。それがあなたにも役立つことを願っています。
既存のレコードの場合、book_title_url
にデータを入力できます 次のような列:
UPDATE books SET book_title_url=REPLACE(REPLACE(REPLACE(book_title, " ", "-"), ":", "-"), "'", "-");