Prima di tutto, l'idea di memorizzare le stringhe di escape nel database sembra strana. MySQL è in grado di memorizzare stringhe di caratteri arbitrari e persino di memorizzare in modo sicuro sequenze binarie.
Ora sulla mappatura da titoli reali a URL graziosi e ritorno. L'idea di convertire il titolo in una stringa compatibile con gli URL e poi tornare indietro non è il modo comune per risolvere il tuo problema, perché è molto difficile rendere reversibile tale conversione. Il modo usuale per risolvere questo problema è avere una colonna separata nel database che contiene il titolo del libro modificato per essere compatibile con gli URL. Anche i valori in queste colonne devono essere resi univoci. La tabella potrebbe assomigliare a questa:
+-----+-----------------------------+----------------------------+
| BID | book_title | book_title_url |
+-----+-----------------------------+----------------------------+
| 1 | Why Can't I Be You: A Novel | why-can-t-i-be-you-a-novel |
+-----+-----------------------------+----------------------------+
Dovresti indicizzare la tua tabella in base a queste colonne e usarla al posto di book_title
nella query SQL all'interno del tuo viewbook.php
script come questo:
SELECT * FROM books WHERE book_title_url='$booktitle'
Dove $booktitle
contiene il titolo del libro ricevuto tramite $_GET['booktitle']
ed è stato eseguito correttamente l'escape per prevenire le iniezioni SQL.
Quindi i tuoi bei URL assomiglieranno a http://www.example.com/title/why-can-t-i-be-you-a-novel
e verranno riscritti da Apache in qualcosa come http://www.example.com/viewbook.php?booktitle=why-can-t-i-be-you-a-novel
.
Ancora una volta, questo è il modo comune con cui vengono solitamente implementati gli URL graziosi. spero che funzioni anche per te.
Per i record esistenti puoi compilare book_title_url
colonna da qualcosa del genere:
UPDATE books SET book_title_url=REPLACE(REPLACE(REPLACE(book_title, " ", "-"), ":", "-"), "'", "-");