PDA

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 داشته باشید به صورت رووت بهش پاس میدید !