اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
یک دقیقه
برای بهبود قسمت ثبت نام در یک سایت بهتر است بین «وحید» و «وَحید» تفاوتی قائل نشد. این مورد ممکن است خصوصا حین ارسال پیامهای خصوصی در آینده جهت تشخیص افراد مشکل ساز شود. همچنین در تهیه slug برای نمایش در Urlها نیز باید اعراب را حذف کرد. منظور از slug، عنوان کوتاهی است که در انتهای یک آدرس ممکن است ذکر شود.
سؤال: چگونه میتوان اعراب را از متون فارسی یا عربی حذف کرد؟
متد انجام اینکار را در ذیل مشاهده میکنید:
توضیحات
متد Normalize با پارامتر NormalizationForm.FormD، سبب میشود تا کاراکترها به گلیفهای اصلی تشکیل دهندهی آنها تجزیه شوند. به عبارتی، حروف از اعراب جدا خواهند شد. در ادامه این کاراکترها اسکن شده و صرفا مواردی که حروف پایه را تشکیل میدهند، جمع آوری و بازگشت داده میشوند. حالت NormalizationForm.FormC که در انتها بکار گرفته شده، برعکس است.
در یونیکد یک حرف میتواند از یک یا چند code point تشکیل شود. در حالت FormC، هر حرف با اعراب آن یک code point را تشکیل میدهند. در حالت FormD، حرف با اعراب آن دو code point را تشکیل خواهند داد. به همین جهت در ابتدای کار، رشته تبدیل به حالت D شده تا بتوان اعراب آنرا مجزای از حروف پایه حذف کرد.
البته اعراب در اینجا به اعراب عربی ختم نمیشود. یک سری حروف اروپایی مانند "ä" ،"ö" و "ü" را نیز شامل میشود.
http://www.site.com/post/12/slug
سؤال: چگونه میتوان اعراب را از متون فارسی یا عربی حذف کرد؟
متد انجام اینکار را در ذیل مشاهده میکنید:
using System.Globalization; using System.Text; static string RemoveDiacritics(string text) { var normalizedString = text.Normalize(NormalizationForm.FormD); var stringBuilder = new StringBuilder(); foreach (var c in normalizedString) { var unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c); if (unicodeCategory != UnicodeCategory.NonSpacingMark) { stringBuilder.Append(c); } } return stringBuilder.ToString().Normalize(NormalizationForm.FormC); }
توضیحات
متد Normalize با پارامتر NormalizationForm.FormD، سبب میشود تا کاراکترها به گلیفهای اصلی تشکیل دهندهی آنها تجزیه شوند. به عبارتی، حروف از اعراب جدا خواهند شد. در ادامه این کاراکترها اسکن شده و صرفا مواردی که حروف پایه را تشکیل میدهند، جمع آوری و بازگشت داده میشوند. حالت NormalizationForm.FormC که در انتها بکار گرفته شده، برعکس است.
در یونیکد یک حرف میتواند از یک یا چند code point تشکیل شود. در حالت FormC، هر حرف با اعراب آن یک code point را تشکیل میدهند. در حالت FormD، حرف با اعراب آن دو code point را تشکیل خواهند داد. به همین جهت در ابتدای کار، رشته تبدیل به حالت D شده تا بتوان اعراب آنرا مجزای از حروف پایه حذف کرد.
البته اعراب در اینجا به اعراب عربی ختم نمیشود. یک سری حروف اروپایی مانند "ä" ،"ö" و "ü" را نیز شامل میشود.