Przede wszystkim dziwnie wygląda pomysł przechowywania znaków ucieczki w bazie danych. MySQL jest w stanie przechowywać ciągi dowolnych znaków, a nawet może bezpiecznie przechowywać sekwencje binarne.
Teraz o mapowaniu z prawdziwych tytułów do ładnych adresów URL iz powrotem. Pomysł, aby przekonwertować tytuł na ciąg znaków przyjazny dla adresu URL, a następnie z powrotem, nie jest powszechnym sposobem rozwiązania problemu, ponieważ bardzo trudno jest przywrócić taką konwersję. Zwykłym sposobem rozwiązania tego problemu jest posiadanie w bazie danych osobnej kolumny zawierającej tytuł książki zmodyfikowany tak, aby był przyjazny dla adresu URL. Również wartości w tych kolumnach powinny być unikatowe. Tabela może wyglądać tak:
+-----+-----------------------------+----------------------------+
| BID | book_title | book_title_url |
+-----+-----------------------------+----------------------------+
| 1 | Why Can't I Be You: A Novel | why-can-t-i-be-you-a-novel |
+-----+-----------------------------+----------------------------+
Powinieneś zindeksować swoją tabelę według tych kolumn i użyć jej zamiast book_title
w zapytaniu SQL w twoim viewbook.php
skrypt taki:
SELECT * FROM books WHERE book_title_url='$booktitle'
Gdzie $booktitle
zawiera tytuł książki otrzymany przez $_GET['booktitle']
i prawidłowo uciekł, aby zapobiec wstrzykiwaniu SQL.
Twoje ładne adresy URL będą więc wyglądać tak:http://www.example.com/title/why-can-t-i-be-you-a-novel
i zostaną przepisane przez Apache na coś takiego jak http://www.example.com/viewbook.php?booktitle=why-can-t-i-be-you-a-novel
.
Ponownie, jest to typowy sposób implementacji ładnych adresów URL. mam nadzieję, że to zadziała również dla Ciebie.
Dla istniejących rekordów możesz wypełnić book_title_url
kolumna przez coś takiego:
UPDATE books SET book_title_url=REPLACE(REPLACE(REPLACE(book_title, " ", "-"), ":", "-"), "'", "-");