Tout d'abord, l'idée de stocker des chaînes échappées dans la base de données semble étrange. MySQL est capable de stocker des chaînes de caractères arbitraires et peut même stocker en toute sécurité des séquences binaires.
Passons maintenant au mappage de vrais titres vers de jolies URL et inversement. L'idée de convertir le titre en chaîne conviviale pour l'URL, puis de revenir en arrière n'est pas la manière courante de résoudre votre problème, car il est très difficile de rendre une telle conversion réversible. La façon habituelle de résoudre ce problème est d'avoir une colonne séparée dans la base de données qui contient le titre du livre modifié pour être compatible avec les URL. De plus, les valeurs de ces colonnes doivent être rendues uniques. Le tableau pourrait ressembler à ceci :
+-----+-----------------------------+----------------------------+
| BID | book_title | book_title_url |
+-----+-----------------------------+----------------------------+
| 1 | Why Can't I Be You: A Novel | why-can-t-i-be-you-a-novel |
+-----+-----------------------------+----------------------------+
Vous devez indexer votre table par ces colonnes et l'utiliser à la place de book_title
dans une requête SQL dans votre viewbook.php
script comme celui-ci :
SELECT * FROM books WHERE book_title_url='$booktitle'
Où $booktitle
contient le titre du livre reçu via $_GET['booktitle']
et correctement échappé pour empêcher les injections SQL.
Ainsi, vos jolies URL ressembleront à http://www.example.com/title/why-can-t-i-be-you-a-novel
et ils seront réécrits par Apache en quelque chose comme http://www.example.com/viewbook.php?booktitle=why-can-t-i-be-you-a-novel
.
Encore une fois, c'est la façon dont les jolies URL sont généralement implémentées. j'espère que cela fonctionnera pour vous aussi.
Pour les enregistrements existants, vous pouvez remplir book_title_url
colonne par quelque chose comme ceci :
UPDATE books SET book_title_url=REPLACE(REPLACE(REPLACE(book_title, " ", "-"), ":", "-"), "'", "-");