تولیدکننده اسلاگ
هر متنی را به اسلاگ تمیز و سازگار با URL تبدیل کنید
متن ورودی
اسلاگ
اسلاگ URL چیست؟
اسلاگ URL بخشی از یک آدرس وب است که یک صفحه خاص را بهصورت خوانا شناسایی میکند. در آدرس https://example.com/blog/my-first-post، اسلاگ my-first-post است. یک تولیدکننده اسلاگ، عنوان یا توضیح یک صفحه را به رشتهای تبدیل میکند که فقط شامل حروف کوچک، اعداد و خطتیره (یا جداکننده دیگری) باشد. این فرایند فاصلهها را حذف میکند، لهجهها و نشانههای تلفظی را میزداید، کاراکترهای خاص را حذف میکند، و فضاهای خالی را به جداکنندههای منفرد تبدیل میکند.
تولید اسلاگ یک مرحله استاندارد در سیستمهای مدیریت محتوا، تولیدکنندههای سایت استاتیک، پلتفرمهای وبلاگ، و هر برنامهای است که URLها را از ورودی کاربر استخراج میکند. WordPress، Ghost، Hugo، Next.js و Django همگی منطق تولید اسلاگ دارند، زیرا URLهای خوانا هم قابلیت استفاده و هم بهینهسازی موتور جستجو را بهبود میبخشند. یک اسلاگ خوشساخت به کاربر میگوید صفحه چه محتوایی دارد، پیش از آنکه روی لینک کلیک کند.
واژه «اسلاگ» از صنعت چاپ روزنامه برگرفته شده، که در آنجا به برچسب کوتاهی اطلاق میشد که برای شناسایی یک خبر در حین تولید استفاده میشد. در توسعه وب، اسلاگ همان نقش را ایفا میکند: شناسهای فشرده، منحصربهفرد و سازگار با URL است که از یک عنوان یا نام بلندتر استخراج میشود. از آنجا که اسلاگها بهصورت برنامهای استخراج میشوند، یک تولیدکننده اسلاگ قابلاطمینان، انسجام را در تمام صفحات و زبانها تضمین میکند.
چرا از این تولیدکننده اسلاگ استفاده کنیم؟
ساخت دستی اسلاگهای URL مستعد خطاست. فراموش کردن حذف یک لهجه، باقی گذاشتن خطتیره دوتایی، یا نادیده گرفتن حالت لبهای با ورودی Unicode میتواند URLهای خراب یا زشت تولید کند. این ابزار همه این مشکلات را بهصورت خودکار رفع میکند.
موارد استفاده از تولیدکننده اسلاگ
قوانین تولید اسلاگ و پردازش کاراکترها
تولید اسلاگ از یک توالی قابل پیشبینی از تبدیلها پیروی میکند. درک هر مرحله به شما کمک میکند خروجی غیرمنتظره را اشکالزدایی کنید یا تابع slugify خود را بسازید.
- ۱. نرمالسازی Unicode (NFD)کاراکترهای ترکیبی را به کاراکتر پایه + نشانه ترکیبی تجزیه کنید. به عنوان مثال، é (U+00E9) به e + نشانه تلفظ حاد ترکیبی (U+0301) تبدیل میشود. این کار امکان حذف نشانههای تلفظی در مرحله بعد را فراهم میکند.
- ۲. حذف نشانههای تلفظیتمام کاراکترهای موجود در بلوک نشانههای تلفظی ترکیبی Unicode (U+0300–U+036F) را حذف کنید. پس از این مرحله، café به cafe و Ñ به N تبدیل میشود.
- ۳. حذف کاراکترهای خاصهر کاراکتری که حرف، رقم، فضای خالی یا خطتیره نیست را با فاصله جایگزین کنید. این نقطهگذاری، نمادها، و کاراکترهایی که معادل ASCII ندارند را حذف میکند.
- ۴. برش و فشردهسازی فضاهای خالیفضاهای خالی ابتدا و انتها را حذف کنید، سپس تمام دنبالههای متوالی از فاصلهها، زیرخطها، یا خطتیرهها را به یک جداکننده انتخابی واحد تبدیل کنید.
- ۵. اعمال حالت حروف و جداکنندهبه حروف کوچک تبدیل کنید (اختیاری) و کلمات را با کاراکتر جداکننده انتخابی به هم بپیوندید: خطتیره (-)، زیرخط (_)، یا نقطه (.).
مرجع تبدیل کاراکترها
جدول زیر نشان میدهد کاراکترهای رایج چگونه در حین تولید اسلاگ پردازش میشوند:
| ورودی | خروجی | قانون اعمالشده |
|---|---|---|
| Hello World | hello-world | Lowercase + space → hyphen |
| Café au Lait | cafe-au-lait | NFD normalization strips é → e |
| naïve résumé | naive-resume | Multiple diacritics removed |
| Price: $9.99! | price-9-99 | Symbols ($, !, :) removed |
| too many | too-many | Whitespace trimmed and collapsed |
| one--two___three | one-two-three | Mixed separators collapsed |
| Привет мир | privet-mir | Cyrillic (if transliteration) or removed |
| file_name.txt | file-name-txt | Dots and underscores replaced |
| React & Vue | react-vue | Ampersand removed |
| 2026-03-30 | 2026-03-30 | Digits and hyphens preserved |
نمونههای کد
تولید اسلاگ در زبانها و فریمورکهای محبوب. هر نمونه نرمالسازی Unicode، حذف نشانههای تلفظی، و درج جداکننده را پردازش میکند.
function slugify(text, separator = '-') {
return text
.normalize('NFD') // decompose accented chars
.replace(/[\u0300-\u036f]/g, '') // strip diacritics
.toLowerCase()
.replace(/[^\w\s-]/g, ' ') // drop special chars
.trim()
.replace(/[\s_-]+/g, separator) // collapse whitespace → separator
// slugify('Café au Lait') → "cafe-au-lait"
// slugify('Hello World', '_') → "hello_world"
}
// Node.js alternative using the `slugify` npm package:
// npm install slugify
// const slugify = require('slugify')
// slugify('Hello World', { lower: true, strict: true }) → "hello-world"import re
import unicodedata
def slugify(text: str, separator: str = '-') -> str:
"""Convert text to a URL-safe slug."""
text = unicodedata.normalize('NFD', text)
text = text.encode('ascii', 'ignore').decode('ascii') # strip non-ASCII
text = text.lower()
text = re.sub(r'[^\w\s-]', ' ', text)
text = text.strip()
text = re.sub(r'[\s_-]+', separator, text)
return text
# slugify('Café au Lait') → "cafe-au-lait"
# slugify('Hello World', '_') → "hello_world"
# Alternative: python-slugify (pip install python-slugify)
# from slugify import slugify
# slugify('Café au Lait') → "cafe-au-lait"package main
import (
"regexp"
"strings"
"unicode"
"golang.org/x/text/unicode/norm"
"golang.org/x/text/transform"
"golang.org/x/text/runes"
)
func slugify(text string) string {
// NFD normalize and strip diacritics
t := transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC)
result, _, _ := transform.String(t, text)
result = strings.ToLower(result)
re := regexp.MustCompile(`[^\w\s-]+`)
result = re.ReplaceAllString(result, " ")
result = strings.TrimSpace(result)
re = regexp.MustCompile(`[\s_-]+`)
result = re.ReplaceAllString(result, "-")
return result
}
// slugify("Café au Lait") → "cafe-au-lait"
// slugify("Hello World") → "hello-world"function slugify(string $text, string $separator = '-'): string {
// Transliterate non-ASCII characters
$text = transliterator_transliterate(
'Any-Latin; Latin-ASCII; Lower()', $text
);
// Remove anything that is not a word char, space, or hyphen
$text = preg_replace('/[^\w\s-]/', ' ', $text);
$text = trim($text);
$text = preg_replace('/[\s_-]+/', $separator, $text);
return $text;
}
// slugify('Café au Lait') → "cafe-au-lait"
// slugify('Hello World', '_') → "hello_world"