it-swarm.asia

كيف يمكنك إزالة الأحرف غير الصالحة عند إنشاء عنوان url سهل الاستخدام (على سبيل المثال ، كيف تقوم بإنشاء سبيكة)؟

قل لدي صفحة الويب هذه: http://ww.xyz.com/Product.aspx?CategoryId=1

إذا كان اسم CategoryId = 1 هو "كلاب" ، فأود تحويل عنوان URL إلى شيء مثل هذا: http://ww.xyz.com/Products/Dogs

المشكلة هي إذا كان اسم الفئة يحتوي على أحرف أجنبية (أو غير صالحة لعنوان url). إذا كان اسم CategoryId = 2 هو "Göra äldre" ، فما هو عنوان URL الجديد؟

منطقيا يجب أن يكون: http://ww.xyz.com/Products/Göra äldre لكنه لن يعمل.

أولاً بسبب المساحة (التي يمكنني استبدالها بسهولة بواسطة شرطة على سبيل المثال) ولكن ماذا عن الأحرف الأجنبية؟ في Asp.net ، يمكنني استخدام وظيفة URLEncode التي من شأنها أن تعطي شيئًا من هذا القبيل: http://ww.xyz.com/Products/G%c3%b6ra+%c3%a4ldre لكنني لا أستطيع حقًا أن أقول أنه أفضل من عنوان URL الأصلي (http://ww.xyz.com/Product.aspx?CategoryId=2).

من الناحية المثالية أود إنشاء هذا واحد ولكن كيف يمكنني القيام بذلك تلقائيًا (أي تحويل الأحرف الأجنبية إلى أحرف URL "آمنة"): http://ww.xyz.com/Products/Gora-aldre.

6
Anthony

لقد توصلت إلى طريقتي الامتداد التاليتين (asp.net/C #):

public static string RemoveAccent(this string txt)
{
    byte[] bytes = System.Text.Encoding.GetEncoding("Cyrillic").GetBytes(txt);
    return System.Text.Encoding.ASCII.GetString(bytes);
}

public static string Slugify(this string phrase)
{
    string str = phrase.RemoveAccent().ToLower();
    str = System.Text.RegularExpressions.Regex.Replace(str, @"[^a-z0-9\s-]", ""); // Remove all non valid chars          
    str = System.Text.RegularExpressions.Regex.Replace(str, @"\s+", " ").Trim(); // convert multiple spaces into one space  
    str = System.Text.RegularExpressions.Regex.Replace(str, @"\s", "-"); // //Replace spaces by dashes
    return str;
}
3
Anthony

يعتمد ذلك على اللغة التي تستخدمها والتقنية التي تريد استخدامها. ألقِ نظرة على مقتطف جافا سكريبت JavaScript هذا من المصدر Django ، فهو يقوم بالضبط بما تحتاجه. يمكنك بسهولة تحويلها إلى اللغة التي تختارها.

هذه هي قصاصة Python المستخدمة في _ slugify Django، وظيفة أقصر بكثير:

def slugify(value):
    """
    Normalizes string, converts to lowercase, removes non-alpha characters,
    and converts spaces to hyphens.
    """
    import unicodedata
    value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore')
    value = unicode(re.sub('[^\w\s-]', '', value).strip().lower())
    return re.sub('[-\s]+', '-', value)

أعتقد أن كل لغة حصلت على منفذ لذلك ، لأنها مشكلة شائعة. فقط جوجل ل slugify + لغتك.

2
D4V360

يمكنك إضافة حقل جديد إلى جدول المنتجات الذي يحتوي على عنوان URL آمن وفريد ​​لكل منتج. ربما يمكن إنشاء هذا تلقائيًا في البداية (استبدال الأحرف غير الآمنة بأقرب مكافئ آمن - gora-aldre؟) ثم ضبطها حسب الحاجة.

نظرًا لأن استبدال الأحرف غير الآمنة لا يمكن (دائمًا) عكسه ، فليس من الممكن تمامًا القيام بهذا النوع من الأشياء أثناء الطيران.

بدلاً من ذلك ، يمكنك إنشاء عنوان URL وبالتالي:

http://example.com/products/1234/safe-string

حيث يتم إنشاء safe-string على الطاير استبدال الأحرف غير الآمنة حسب الحاجة. الرقم 1234 هو مفتاح المنتج. يمكنك استخدام المفتاح للبحث عن المنتج ، فهناك "السلسلة الآمنة" أكثر من ذلك للمستخدم ومحركات البحث.

1
Kris

شيئان يجب مراعاتهما:

  1. بوجه عام ، لا يكون لإعادة كتابة عنوان URL تأثير إيجابي على محركات البحث (وغالبًا ما يكون سالبًا) - لذلك يجب عليك القيام بذلك فقط إذا كنت تعرف تأثيرًا إيجابيًا يمكن قياسه على رضا المستخدم (وبالتالي: اجعل عناوين URL مفيدة للمستخدمين) .

  2. إذا قررت القيام بإعادة كتابة عنوان URL ، فأنت must ​​لديك التفاصيل الفنية باستمرار. على سبيل المثال ، يجب ألا يكون لديك أكثر من عنوان URL فريد يعرض نفس المحتوى. تأكد من استخدام UTF-8 لتشفير المحتوى غير ASCII ، واستخدام الروابط المتجاوزة داخل المحتوى الخاص بك ، واختبارها بشكل عام على العديد من المتصفحات للتأكد من أن الأشياء تعمل كما هو مخطط لها. إذا كان أي من هذه الأشياء غريبًا عليك ، فإني أوصي بشدة بعدم القيام بإعادة كتابة عنوان URL في الوقت الحالي.

FWIW يتم تغطية بعض المشكلات المتعلقة بمحرك البحث في http://googlewebmastercentral.blogspot.com/2008/09/dynamic-urls-vs-static-urls.html

1
John Mueller

أفضل طريقة IMO هي القائمة البيضاء الأحرف بدلاً من محاولة البحث عن أحرف غير صالحة. ومع ذلك ، فإن الأحرف المحركة مثل é شائعة إلى حد ما (وسيكون عنوان URL الخاص بك غريبًا بدونها) حتى تتمكن من تحويلها أولاً.

في PHP ، يمكنك استخدام الدالة strtr ، لكن يجب أن تكون قادرًا على تعديل هذا لاحتياجاتك على asp.net:

strtr(
  'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ',
  'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyrr'
);

الآن ها هي عمليتك:

  1. [اختياري] حوّل السلسلة إلى أحرف صغيرة (يوصى بها عادةً لعناوين URL).
  2. [اختياري] قم بتحويل الأحرف المعلمة باستخدام التعيين أعلاه.
  3. تشغيل من خلال سلسلة الإدخال حرف بحرف.
  4. قد يكون من الأسرع تنفيذ رقم 1 ورقم 2 لكل حرف بدلاً من السلسلة بأكملها ، اعتمادًا على الوظائف المضمنة لديك.
  5. إذا كان الحرف في النطاق a-z أو -9 ، فأضفه إلى السلسلة الجديدة ، وإلا:
    أ) إذا كان لديك بالفعل واصلة في نهاية السلسلة الجديدة ، فتجاهلها
    ب) إذا لم يكن كذلك ، أضف واصلة إلى نهاية السلسلة.
  6. عندما تصل إلى النهاية ، قم بإزالة الواصلات وقيادتها أو تعقبها وأنت على وشك الانتهاء!
1
DisgruntledGoat

نظرًا لأنك وضعت علامة ASP.Net: انظر إلى هذا الموقع ، فإنه يحتوي على نموذج التعليمات البرمجية لاستبدال (معظم) النص بعلامات التشكيل (الأحرف غير الصالحة التي تتصل بها) بحرفها الأساسي.

كما ذكر كريس ، استخدم معرف فريد في عنوان url الخاص بك ، كما يفعل هذا الموقع. إذا لم يكن لديك أي تحكم في المعرف المقدم لك ، فيجب عليك إنشاء جدول ترجمة يحتوي على المعرف الفريد الخاص بك ، مع المعرف الفريد الخارجي. بهذه الطريقة تكون مراجعك الداخلية جيدة أيضًا عندما يتغير المعرف الخارجي. جنبا إلى جنب مع المعرف الفريد الخاص بك ، يمكنك تخزين "معرف البحث والمحسن الخاص بك" ، وهو ليس فريدًا من نوعه ولكنه يبدو جيدًا.

0
GvS

غالبًا ما تستخدم Wikipedia أحرفًا غير لاتينية في عناوين URL الخاصة بها. لا يوجد سبب (باستثناء خادم الويب الخاص بك لا يدعمهم) بأنه يجب عليك عدم استخدام عناوين URL هذه.

ومع ذلك؛ إذا كان عليك تجنب هذه الأحرف ، فقد وجدت أن استبدالها بنموذج غير - diacritic . يمكن لمعظم الأشخاص الذين يقرؤون هذه أن يخبروا (من السياق) ما يفترض أن تكون الكلمة على الرغم من أنه تم إزالة علامات التشكيل.

0
Greg B