На първо място, идеята за съхраняване на екранирани низове в базата данни изглежда странна. 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
в SQL заявка във вашия viewbook.php
скрипт като този:
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, " ", "-"), ":", "-"), "'", "-");