Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Apostrophe und Doppelpunkte in Pretty Links

Zunächst einmal sieht die Idee, maskierte Zeichenfolgen in einer Datenbank zu speichern, seltsam aus. MySQL kann Zeichenfolgen aus beliebigen Zeichen und sogar binäre Sequenzen sicher speichern.

Nun zur Zuordnung von echten Titeln zu hübschen URLs und zurück. Die Idee, den Titel in eine URL-freundliche Zeichenfolge und dann zurück zu konvertieren, ist nicht der übliche Weg, um Ihr Problem zu lösen, da es sehr schwierig ist, eine solche Konvertierung rückgängig zu machen. Der übliche Weg, dieses Problem zu lösen, besteht darin, eine separate Spalte in der Datenbank zu haben, die den Buchtitel enthält, der so geändert wurde, dass er URL-freundlich ist. Auch Werte in diesen Spalten sollten eindeutig sein. Die Tabelle könnte so aussehen:

+-----+-----------------------------+----------------------------+
| BID | book_title                  | book_title_url             |
+-----+-----------------------------+----------------------------+
|   1 | Why Can't I Be You: A Novel | why-can-t-i-be-you-a-novel |
+-----+-----------------------------+----------------------------+

Sie sollten Ihre Tabelle nach diesen Spalten indizieren und sie anstelle von book_title verwenden in der SQL-Abfrage in Ihrer viewbook.php Skript wie folgt:

SELECT * FROM books WHERE book_title_url='$booktitle'

Wobei $booktitle enthält den über $_GET['booktitle'] erhaltenen Buchtitel und ordnungsgemäß maskiert, um SQL-Einschleusungen zu verhindern.

Ihre hübschen URLs sehen also so aus:http://www.example.com/title/why-can-t-i-be-you-a-novel und sie werden von Apache zu etwas wie http://www.example.com/viewbook.php?booktitle=why-can-t-i-be-you-a-novel umgeschrieben .

Auch dies ist die übliche Art und Weise, wie hübsche URLs normalerweise implementiert werden. hoffe es funktioniert auch bei dir.

Für vorhandene Datensätze können Sie book_title_url ausfüllen Spalte etwa so:

UPDATE books SET book_title_url=REPLACE(REPLACE(REPLACE(book_title, " ", "-"), ":", "-"), "'", "-");