View Full Version : حرفه ای: ایجاد کردن SlugUrl
سعید کشاورز
جمعه 12 مرداد 1397, 17:13 عصر
سلام دوستان
چجوری میشه از روی عنوان تولید Url کرد؟
مثلا فرض کنید عنوان یک مطلب این هست
آموزش asp.net به زبان فارسی بخش 1/2
اگه دقیت کنید همه چی در عنوان بالا داریم
من می خوام کاراکتر های غیر مجاز در رشته حذف بشه و به جای فضای خالی - قرار بگیره
مثلا اون # حذف بشه
نقطه بعد از asp حذف بشه
و در نهایت این بشه
آموزش-asp-net-به-زبان-فارسی-بخش-1-5
یه سری کاراکتر های غیر مجاز مثل !@#$%^&*)( نمیخوام توی آدرس باشه
ممکنه بعضی وقتا آدرس تمامش انگلیسی باشه
بعضی وقتا فارسی
و یا ترکیبی از هر دو و اعداد
Moien Tajik
جمعه 12 مرداد 1397, 17:27 عصر
از این regex میتونید روی title استفاده کنید و slug رو بسازید :
/[^\w\s]+/gu
نمونه : https://regex101.com/r/YICDDq/2
برای جایگزین کردن space با - هم از string.Replace استفاده کنید.
سعید کشاورز
جمعه 12 مرداد 1397, 18:05 عصر
ممنون
از طریق دستور زیر اجراش کردم اما عمل نکرد
str = Regex.Replace(str, "/[^\\w\\s]+/gu", "");
Moien Tajik
شنبه 13 مرداد 1397, 01:33 صبح
از این Extension Method استفاده کنید :
public static class StringExtensions
{
public static string ToSlug(this string text)
{
var slug = new Regex(@"[^\w\s]+").Replace(text, "-");
return RemoveLastDash(slug).Replace("_", "-");
}
private static string RemoveLastDash(string slug)
{
var textLength = slug.Length - 1;
var lastChar = slug[textLength];
if (lastChar == '-')
{
slug = new StringBuilder(slug)
{
[textLength] = '\0'
}.ToString();
}
return slug;
}
}
میلاد رئیسی
دوشنبه 15 مرداد 1397, 10:09 صبح
با سلام و کسب اجازه از آقای تاجیک بنده متد ایجاد slug رو به صورت کامل تر قرار میدم .
private const int MaxLenghtSlug = 45;
public static string GenerateSlug(string title)
{
var slug = RemoveAccent(title).ToLower();
slug = Regex.Replace(slug, @"[^a-z0-9-\u0600-\u06FF]", "-");
slug = Regex.Replace(slug, @"\s+", "-").Trim();
slug = Regex.Replace(slug, @"-+", "-");
slug = slug.Substring(0, slug.Length <= MaxLenghtSlug ? slug.Length : MaxLenghtSlug).Trim();
return slug;
}
private static string RemoveAccent(string text)
{
var bytes = Encoding.GetEncoding("UTF-8").GetBytes(text);
return Encoding.UTF8.GetString(bytes);
}
amintarjomeh.ir
دوشنبه 29 مرداد 1397, 17:27 عصر
از زحمات شما متشکرم. ولی کاش راهنمایی می کردید که چه طور slug رو در url قرار بدیم که مثلا به صورت زیر بشه
http://mysite.com/22/this-is-test
اگر در این مورد نمونه کد دارید یا تجربه ای دارید ممنون می شم به اشتراک بگذارید. تشکر
میلاد رئیسی
سه شنبه 30 مرداد 1397, 06:56 صبح
با استفاده از رووتینگ باید slug رو تعیریف کنید :
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Account}/{action=Index}/{id?}/{slug?}");
بعد هر جایی میخوایید هرجایی میخوایید slug داشته باشید به صورت رووت بهش پاس میدید !
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.