Slugify κειμένου (URL)
Κανονικοποιήστε το κείμενο σε slug φιλικό προς URL, με υποστήριξη για πεζά γράμματα, διαχωριστικά και προσαρμοσμένη αφαίρεση λέξεων-κλειδιών.
Γιατί χρειάζεται το Slugify;
🔍 Βελτιστοποίηση SEO
Οι λέξεις-κλειδιά στο URL βοηθούν τους μηχανισμούς αναζήτησης να κατανοήσουν το περιεχόμενο της σελίδας και να βελτιώσουν τη θέση. Για παράδειγμα, example.com/blog/how-to-learn-javascript είναι πιο φιλικό από example.com/blog/123.
👁️ Αναγνωσιμότητα και κοινοποίηση
Οι χρήστες μπορούν να καταλάβουν το περιεχόμενο από το URL. Είναι πιο φιλικά για κοινοποίηση σε κοινωνικά δίκτυα και ευκολότερα να θυμηθούν ή πληκτρολογηθούν χειροκίνητα.
💻 Συμβατότητα συστήματος
Αποφύγετε σφάλματα από ειδικούς χαρακτήρες σε ονόματα αρχείων ή URLs, εξασφαλίζοντας συμβατότητα μεταξύ πλατφορμών (Windows/Linux/Mac) και αποφεύγοντας προβλήματα κωδικοποίησης.
🗄️ Φιλικό προς βάσεις δεδομένων
Ως μοναδικός αναγνωριστικός (π.χ. όνομα χρήστη, ετικέτες), αποφεύγετε κινδύνους SQL injection, ενισχύοντας την ευκολία ευρετηρίασης και ερωτημάτων.
Τι είναι το Slugify;
Το slug είναι μια συντομευμένη, κανονικοποιημένη μορφή ενός κειμένου που χρησιμοποιείται ως URL, όνομα αρχείου ή ταυτότητα. Οι κοινές επεξεργασίες περιλαμβάνουν ομοιογένεια πεζών/κεφαλαίων, αφαίρεση σημείων στίξης και σύνδεση λέξεων με διαχωριστικά.
- Προτίμηση ASCII: Αφαιρέστε όσο το δυνατόν περισσότερα τόνους και σύμβολα, διατηρώντας μόνο γράμματα, ψηφία και κενά
- Συμβατότητα Unicode: Κανονικοποίηση NFKD για πλειοψηφία χαρακτήρων γλωσσών
- Φιλικό προς URL: Το αποτέλεσμα περιέχει μόνο γράμματα, ψηφία και διαχωριστικά, επιτρέποντας άμεση χρήση σε διαδρομές
Συχνές ερωτήσεις
Q: Πώς επεξεργάζονται τα κινεζικά χαρακτήρες;
A: Προεπιλογή, αφαιρούνται τα τόνοι και διατηρούνται τα γράμματα pinyin. Καθαρά κινεζικά μπορεί να γίνουν κενά. Συνιστάται να μετατρέψετε χειροκίνητα σε pinyin πριν το slugify, ή να χρησιμοποιήσετε εργαλείο μετατροπής κινεζικών σε pinyin.
Q: Γιατί το αποτέλεσμά μου είναι κενό;
A: Ίσως η εισαγωγή να αποτελείται αποκλειστικά από σημεία στίξης/σύμβολα/κενά, ή να μην απομένουν λέξεις μετά την ενεργοποίηση της φιλτραρίσματος λέξεων-σταματήματος. Δοκιμάστε να απενεργοποιήσετε την επιλογή λέξεων-σταματήματος ή να τροποποιήσετε το περιεχόμενο εισαγωγής.
Q: Ποιος διαχωριστής πρέπει να χρησιμοποιηθεί, - ή _;
A: Για SEO, συνιστάται ο - (παύλα), γιατί η Google τον ερμηνεύει ως κενό. Ο _ (κάτω παύλα) θεωρείται συνδετικός χαρακτήρας και δυσκολεύει την τομή λέξεων. Για ονόματα αρχείων, μπορείτε να επιλέξετε οποιονδήποτε.
Q: Υπάρχει περιορισμός στο μήκος του slug;
A: Τεχνικά δεν υπάρχει περιορισμός, αλλά συνιστάται να διατηρείται κάτω από 50 χαρακτήρες για καλύτερη εμφάνιση URL και SEO. Μακριά slugs μπορεί να κόβονται από τους μηχανές αναζήτησης.
Καλές πρακτικές
Συνιστώμενες πρακτικές
- ✓ Διατηρήστε το σύντομο (συνιστάται < 50 χαρακτήρες)
- ✓ Αποφύγετε ειδικούς χαρακτήρες· χρησιμοποιήστε μόνο γράμματα/αριθμούς/διαχωριστές
- ✓ Μετατρέψτε σε πεζά για να αποφύγετε προβλήματα ευαισθησίας πεζών/κεφαλαίων
- ✓ Αφαιρέστε λέξεις-σταματήματος για να βελτιώσετε τη σημασιολογική πυκνότητα
Αποφύγετε
- ✗ Μην συμπεριλαμβάνετε ευαίσθητες πληροφορίες (π.χ. ID, email, κωδικοί πρόσβασης)
- ✗ Μην χρησιμοποιείτε ειδικούς χαρακτήρες (π.χ. @#$%^&*)
- ✗ Μην διατηρείτε κενά ή συνεχόμενους διαχωριστές
- ✗ Μην επαναλαμβάνετε την ίδια λέξη
Τεχνικές λεπτομέρειες
Χρησιμοποιείται NFKD διάσπαση + αφαίρεση συνδυαστικών τόνων (\p{M}), μετατρέποντας το Café σε Cafe. Υποστηρίζει τους περισσότερους λατινικούς χαρακτήρες.
Βασισμένη σε κοινές αγγλικές λέξεις (a/an/the/and/or/of/to/in/on/for/at/by/with), επεκτάσιμη με προσαρμογή. Για κινεζικές λέξεις-σταματήματος, απαιτείται επιπλέον επεξεργασία.
Απαιτείται υποστήριξη ES6+ και Unicode regex (\p{...}). Σύγχρονα προγράμματα περιήγησης (Chrome 64+, Firefox 78+, Safari 11.1+) το υποστηρίζουν.
Πώς να δημιουργήσετε ένα Slug μέσω γλώσσας προγραμματισμού;
JavaScript
function slugify(text) {
return text
.toLowerCase()
.normalize("NFKD")
.replace(/[\u0300-\u036f]/g, "")
.replace(/[^\w\s-]/g, "")
.trim()
.replace(/[\s_-]+/g, "-")
.replace(/^-+|-+$/g, "");
}
PHP
function slugify($text) {
$text = mb_strtolower($text);
$text = iconv("UTF-8", "ASCII//TRANSLIT", $text);
$text = preg_replace("/[^\w\s-]/", "", $text);
$text = preg_replace("/[\s_-]+/", "-", $text);
return trim($text, "-");
}
Python
import re
import unicodedata
def slugify(text):
text = text.lower()
text = unicodedata.normalize("NFKD", text)
text = text.encode("ascii", "ignore").decode("ascii")
text = re.sub(r"[^\w\s-]", "", text)
text = re.sub(r"[\s_-]+", "-", text)
return text.strip("-")
Go
import (
"regexp"
"strings"
"golang.org/x/text/unicode/norm"
)
func Slugify(text string) string {
text = strings.ToLower(text)
text = norm.NFKD.String(text)
re := regexp.MustCompile(`[^\w\s-]`)
text = re.ReplaceAllString(text, "")
re = regexp.MustCompile(`[\s_-]+`)
text = re.ReplaceAllString(text, "-")
return strings.Trim(text, "-")
}
Ruby
require "unicode"
def slugify(text)
text = text.downcase
text = Unicode.nfkd(text).gsub(/[^\x00-\x7F]/, "")
text = text.gsub(/[^\w\s-]/, "")
text = text.gsub(/[\s_-]+/, "-")
text.strip.gsub(/^-+|-+$/, "")
end
Java
import java.text.Normalizer;
public static String slugify(String text) {
text = text.toLowerCase();
text = Normalizer.normalize(text, Normalizer.Form.NFKD);
text = text.replaceAll("[^\\w\\s-]", "");
text = text.replaceAll("[\\s_-]+", "-");
return text.replaceAll("^-+|-+$", "");
}