Za prvé, nápad ukládat uniklé řetězce do databáze vypadá divně. MySQL je schopno ukládat řetězce libovolných znaků a dokonce může bezpečně ukládat binární sekvence.
Nyní o mapování ze skutečných názvů na pěkné adresy URL a zpět. Myšlenka převést název na řetězec vhodný pro URL a poté zpět není běžným způsobem řešení vašeho problému, protože je velmi obtížné provést takový převod zpět. Obvyklým způsobem, jak tento problém vyřešit, je mít v databázi samostatný sloupec obsahující název knihy upravený tak, aby vyhovoval URL. Také hodnoty v těchto sloupcích by měly být jedinečné. Tabulka může vypadat takto:
+-----+-----------------------------+----------------------------+
| BID | book_title | book_title_url |
+-----+-----------------------------+----------------------------+
| 1 | Why Can't I Be You: A Novel | why-can-t-i-be-you-a-novel |
+-----+-----------------------------+----------------------------+
Měli byste indexovat tabulku podle těchto sloupců a používat ji namísto book_title
v dotazu SQL ve vašem viewbook.php
skript takto:
SELECT * FROM books WHERE book_title_url='$booktitle'
Kde $booktitle
obsahuje název knihy přijatý prostřednictvím $_GET['booktitle']
a správně escapován, aby se zabránilo injekcím SQL.
Vaše hezké adresy URL tedy budou vypadat jako http://www.example.com/title/why-can-t-i-be-you-a-novel
a Apache je přepíše na něco jako http://www.example.com/viewbook.php?booktitle=why-can-t-i-be-you-a-novel
.
Opět je to běžný způsob, jak jsou obvykle implementovány hezké adresy URL. doufám, že to bude fungovat i vám.
Pro existující záznamy můžete vyplnit book_title_url
sloupec něčím takovým:
UPDATE books SET book_title_url=REPLACE(REPLACE(REPLACE(book_title, " ", "-"), ":", "-"), "'", "-");