PHP URL Kürzen-Algorithmus
Könnte jemand empfehlen, ein bevorzugter Algorithmus für die URL-Verkürzung? Ich bin-Kodierung mit PHP. Anfangs dachte ich, über etwas zu schreiben, würde beginnen bei einem Zeichen wie "a" und Durchlaufen werden, Anfragen, die Erstellung von Datensätzen in einer Datenbank sind und daher, erhöhen Sie die Zeichen b, c, d ... A, B und so weiter, angebracht.
Jedoch dämmerte es mir, dass dieser Algorithmus könnte ziemlich schwer/umständlich und es könnte ein besserer Weg, es zu tun.
Lese ich ein wenig um, Google und einige Leute scheinen, es zu tun mit Basis-Konvertierung aus der Datenbank die Spalte ID. Dies ist nicht etwas ich bin zu sehr vertraut mit.
Könnte jemand aufwendigen und mir erklären, wie das funktionieren würde? Ein paar code-Beispiele wären auch Klasse.
Ich offensichtlich nicht wollen eine komplette Lösung möchte ich lernen, es selbst zu tun, sondern einfach eine Erklärung/pseudo-code, wie dies funktionieren würde, wäre hervorragend.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meisten Verkürzung services, verwenden Sie einfach einen Zähler, der inkrementiert, mit jedem Eintrag und konvertieren der Basis von 10 bis 64.
Einer Implementierung in PHP könnte wie folgt Aussehen:
Den
encode
Funktion eine integer-Zahl, konvertiert diese in bytes (pack
), kodiert es mit dem Base-64-Codierung (base64_encode
), trimmt die nachfolgende Polsterung=
(trim
), und ersetzt die Zeichen+
und/
durch-
und_
bzw. (strtr
). Diedecode
- Funktion ist die inverse Funktion zuencode
und tut genau das Gegenteil (außer das hinzufügen von trailing-Polsterung).Den zusätzlichen Einsatz von
strtr
ist zu übersetzen original Base-64-alphabet der URL und filename sicher alphabet als+
und/
müssen codiert werden mit der Percentage-Codierung.Können Sie base_convert Funktion führen Sie ein Basis-Konvertierung von 10 bis 36 mit der Datenbank-IDs.
Oder Sie wiederverwenden können einige der vorgestellten Ideen in die Kommentare auf der Seite unten:
http://php.net/manual/en/function.base-convert.php
ich verwendet, um zu brechen-ID durch einen Algorithmus ähnlich wie konvertieren von dezimal zu hex, aber es wird mit 62 Zeichen anstelle von 16 Zeichen, hex verwenden würde.
Beispiel : wenn Sie die ID ändern = 1234567890 erhalten Sie kv7yl1, wie Ihr einen Schlüssel.
Vorausgesetzt, Ihr Primärschlüssel ist ein INT, und es auto_increments, der folgende code wird Euch gehen =).
EDIT: Inklusive der base_convert von HGF Antwort. Ich vergaß zu base_convert in der original-post.
Nahm ich eine "leichte" Lösung. Auf user-Wunsch Generiere ich einen eindeutigen Bezeichner (prüfen auf Konflikte in db) mit diesem python-snipplet:
und speichert ihn in db.
Den nativen PHP-base_convert() funktioniert gut für kleine Bereiche von zahlen, aber wenn Sie wirklich brauchen, um zu Kodieren, große Werte, verwenden Sie so etwas wie die Umsetzung hier, die arbeiten zu base-64 und darüber hinaus, wenn Sie einfach mehr rechts-Zeichen für die Codierung.
http://af-design.com/blog/2010/08/10/working-with-big-integers-in-php/
Hier versuchen Sie diese Methode :
Wird es Ihnen mit hash-Wert passen für eine professionelle url-shortener, e.g: '142ecd53'