توجيه عنوان URL:التعامل مع المسافات والأحرف غير القانونية عند إنشاء عناوين URL سهلة الاستخدام

StackOverflow https://stackoverflow.com/questions/266719

  •  06-07-2019
  •  | 
  •  

سؤال

لقد رأيت الكثير من المناقشات حول توجيه URL، والكثير من الاقتراحات الرائعة...لكن في العالم الحقيقي، هناك شيء واحد لم أشاهد مناقشته وهو:

  1. إنشاء عناوين URL ودية مع مسافات وأحرف غير قانونية
  2. الاستعلام عن قاعدة البيانات

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


فئات الأمثلة/بنية فرعية/مقالة:

  1. صحتك العامة (الفئة)
    • الصحة الطبيعية (تصنيف فرعي)
      1. جهاز المناعة في جسمك ولماذا يحتاج إلى المساعدة. (شرط)
      2. هل النباتات والأعشاب هي الحل حقاً؟
      3. هل يجب أن أتناول الأطعمة المدعمة؟
    • الطب المثلية
      1. ما هو الطب المثلية؟
    • أكل صحي
      1. هل يجب أن تشرب 10 فناجين من القهوة يوميا؟
      2. هل الخضروات العضوية تستحق العناء؟
      3. هل برجر كنج® شرير؟
      4. هل "القهوة الفرنسية" أم القهوة الأمريكية أكثر صحة؟
  2. الأمراض والحالات (الفئة)
    • اضطرابات المناعة الذاتية (تصنيف فرعي)
      1. القاتل رقم 1 للناس هو بعض الأمراض
      2. كيف أحصل على المساعدة
    • الظروف الوراثية
      1. الوقاية من السنسنة المشقوقة قبل الحمل.
      2. هل أنت مستعد للعيش لفترة طويلة؟
  3. دكتور.اقتراحات FooBar الشخصية (الفئة)
    1. أفكاري حول طب الأعشاب والعلاجات الطبيعية (مقال - لا يوجد فئة فرعية)
    2. لماذا يجب أن تهتم بصحتك؟
    3. من الممكن تناول الطعام بشكل صحيح واتباع نظام غذائي جيد.
    4. هل وصلت الجراحة دون دم إلى سن الرشد؟

في هيكل مثل هذا، سيكون لديك بعض عناوين URL الطويلة إذا ذهبت:/{الفئة}/{الفئة الفرعية}/{عنوان المقالة}

وبالإضافة إلى ذلك، هناك العديد أحرف غير قانونية, ، يحب # !؟"ه" الخ.

إذن، السؤال (الأسئلة) هو:

  1. كيف تتعامل مع الشخصيات والمسافات غير القانونية؟(إيجابيات وسلبيات؟)
  2. هل ستتعامل مع الحصول على هذا من قاعدة البيانات
    • وبعبارة أخرى، هل ثق في قاعدة البيانات للعثور عليها العنصر ، تمرير العنوان ، أو سحب كافة العناوين والعثور على المفتاح في الكود للحصول على المفتاح لتمريره إلى قاعدة البيانات (مكالمتان لقاعدة البيانات)؟

ملحوظة:أرى دائمًا أمثلة جميلة وجميلة مثل /products/beverages/Short-Product-Name/ ماذا عن التعامل مع بعض الأمثلة القبيحة ^_^

هل كانت مفيدة؟

المحلول

أنا شخصياً أفضّل - لأسباب تتعلق بقابلية القراءة (وضعت خطًا تحته و _'s تقريبًا go_away ) ، إذا كنت ستقوم بتجريد المساحات.

قد ترغب في محاولة إرسال أحرف موسعة، على سبيل المثال، ü ، إلى معادلات ascii حيثما أمكن ذلك، على سبيل المثال:

ü -> ش

ومع ذلك، في تجربتي أكبر مشكلة مع فِعلي المشكلات المتعلقة بتحسين محركات البحث، لا تتمثل في أن عنوان URL يحتوي على كل النص الجميل، بل عندما يتعلق الأمر بالأشخاص يتغير النص الموجود في الرابط، كل أعمال تحسين محركات البحث (SEO) الخاصة بك تتحول إلى حماقة لأنك فعلت ذلك الآن الروابط النهائية في الفهارس.

لهذا، أود أن أقترح ما يفعله نظام stackoverflow، وأن يحتوي على جزء رقمي يشير إلى كيان ثابت، ويتجاهل تمامًا بقية النص (و/أو يقوم بتحديثه عندما يكون خاطئًا).

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

/article/1/Some_Article_Title_Here
/article/1/Section/5/Section_Title_Here
/section/19023/Section_Title_here  ( == above link ) 

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

نصائح أخرى

نهجي الأخير هو:

  1. تحويل جميع "الأحرف الغريبة" إلى "أحرف عادية" -> à إلى a، ñ إلى n، إلخ.
  2. تحويل كافة الأحرف غير الكلمة إلى _ (أي ليس a-zA-Z0-9)
  3. استبدال مجموعات الشرطة السفلية بشرطة سفلية واحدة
  4. إزالة كافة الشرطات السفلية والخلفية

أما بالنسبة للتخزين، أعتقد أن عنوان URL المألوف يجب أن ينتقل إلى قاعدة البيانات، وأن يكون غير قابل للتغيير، بعد كل شيء عناوين URI الرائعة لا تتغير

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

لكن.لا يوجد حرف غير قانوني فعليًا في جزء مسار URL، طالما قمت بترميزه بشكل مناسب.على سبيل المثال، يمكن ترميز المسافة أو التجزئة أو الشرطة المائلة كـ %20 أو %23 أو %2F.بهذه الطريقة من الممكن التشفير أي السلسلة في جزء عنوان URL، حتى تتمكن من تحديدها مرة أخرى من قاعدة البيانات بواسطة عنوان فعلي دون تغيير.

هناك بعض المشكلات المحتملة في هذا الأمر اعتمادًا على إطار عمل الويب الخاص بك.على سبيل المثال، لن يتمكن أي شيء يعتمد على CGI من التمييز بين %2F المشفر و/ الحقيقي، وقد تواجه بعض الأطر/عمليات النشر صعوبة مع أحرف Unicode.

وبدلاً من ذلك، يتمثل الحل البسيط والآمن في تضمين المفتاح الأساسي في عنوان URL، وذلك باستخدام الأجزاء التي تحمل عنوانًا فقط لجعل العنوان أجمل.على سبيل المثال:

http://www.example.com/x/category-name/subcat-name/article-name/348254863

هذه هي الطريقة على سبيل المثال.أمازون تفعل ذلك.يتمتع بميزة أنه يمكنك تغيير العنوان في قاعدة البيانات وإعادة توجيه عنوان URL الذي يحمل العنوان القديم تلقائيًا إلى العنوان الجديد.

فى حاله ان اى شخص مهتم.هذا هو الطريق (آه..تافه) أنا آخذ:

Route r = new Route("{country}/{lang}/Article/{id}/{title}/", new NFRouteHandler("OneArticle"));
Route r2 = new Route("{country}/{lang}/Section/{id}-{subid}/{title}/", new NFRouteHandler("ArticlesInSubcategory"));
Route r3 = new Route("{country}/{lang}/Section/{id}/{title}/", new NFRouteHandler("ArticlesByCategory"));

وهذا يوفر لي القدرة على عمل عناوين url مثل:

  • site.com/ca/en/Article/123/my-life-and-health
  • site.com/ca/en/Section/12-3/Health-Issues
  • site.com/ca/en/Section/12/

عند تنظيف عناوين URL، إليك الطريقة التي أستخدمها لاستبدال الأحرف المحركة:

private static string anglicized(this string urlpart) {
        string before = "àÀâÂäÄáÁéÉèÈêÊëËìÌîÎïÏòÒôÔöÖùÙûÛüÜçÇ’ñ";
        string  after = "aAaAaAaAeEeEeEeEiIiIiIoOoOoOuUuUuUcC'n";

        string cleaned = urlpart;

        for (int i = 0; i < avantConversion.Length; i++ ) {

            cleaned = Regex.Replace(urlpart, before[i].ToString(), after[i].ToString());
        }

        return cleaned;

        // Here's some for Spanish : ÁÉÍÑÓÚÜ¡¿áéíñóúü"

}

لا أعرف ما إذا كان هذا هو Regex الأكثر كفاءة، لكنه فعال بالتأكيد.إنها طريقة تمديد، لذا لتسميتها، ما عليك سوى وضع الطريقة في فئة ثابتة والقيام بشيء مثل هذا:

string articleTitle = "My Article about café and the letters àâäá";
string cleaned = articleTitle.anglicized();

// replace spaces with dashes
cleaned = Regex.Replace( cleaned, "[^A-Za-z0-9- ]", "");

// strip all illegal characters like punctuation
cleaned = Regex.Replace( cleaned, " +", "-").ToLower();

// returns "my-article-about-cafe-and-the-letters-aaaa"

بالطبع، يمكنك دمجها في طريقة واحدة تسمى "CleanUrl" أو شيء من هذا القبيل، ولكن هذا الأمر متروك لك.

كمتابعة.لدي بعض الأفكار.لذا لا تتردد في التعليق على الأفكار أو إعطاء إجابتك الخاصة على السؤال:

الحل رقم 1:استبدل جميع الأحرف غير القانونية بشرطات:

  • www.mysite.com/diseases---conditions/Auto-immune-disorders/the--1-killer-of-people-is-some-disease/

يبدو لي ذلك قبيحاً بعض الشيء..

الحل رقم 2:إزالة الأحرف غير القانونية واستبدال المسافات بشرطات مفردة:

  • www.mysite.com/diseases-conditions/Auto-immune-disorders/the-1-killer-of-people-is-some-disease/

الحل رقم 3 قم بتطبيق بعض القواعد لاستبدال أحرف معينة بالكلمات:

  • www.mysite.com/diseases-and-conditions/Auto-immune-disorders/the-number1-killer-of-people-is-some-disease/

الحل رقم 4 قم بإزالة جميع المسافات واستخدم الكتابة بالأحرف الكبيرة

  • www.mysite.com/DiseasesAndConditions/AutoImmuneDisorders/TheNumber1KillerOfPeopleIsSomeDisease/

(قد لا يعمل بشكل جيد على الخوادم الحساسة لحالة الأحرف ويصعب قراءته)

الحل 2 سيكون توصيتي.أنا لست أكبر خبير في تحسين محركات البحث (SEO) في العالم، لكنني أعتقد أنها الطريقة "القياسية" إلى حد كبير للحصول على تصنيفات جيدة على أي حال.

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

لقد قمت بحل هذه المشكلة عن طريق إضافة عمود إضافي في قاعدة البيانات (على سبيل المثال:UrlTitle إلى جانب عمود العنوان) وحفظ عنوان مجردًا من جميع الأحرف غير القانونية مع استبدال الرموز "&" بـ "و"، واستبدال المسافات بشرطات سفلية.ثم يمكنك البحث عبر UrlTitle واستخدام العنوان الحقيقي في عنوان الصفحة أو في أي مكان.

أقترح القيام بما يفعله WordPress - إزالة الكلمات الصغيرة واستبدال الأحرف غير القانونية بشرطات (شرطة واحدة كحد أقصى) ثم السماح للمستخدم بتصحيح عنوان URL إذا أراد ذلك.من الأفضل أن يقوم مُحسّنات محرّكات البحث (SEO) بجعل عنوان URL قابلاً للتكوين.

باعتباري مستخدم عميل، وليس مصمم ويب، أجد أن Firefox يكسر أحيانًا عنوان URL عندما يحاول استبدال الأحرف "غير القانونية" بأحرف قابلة للاستخدام.على سبيل المثال، يستبدل FF ~ بـ %7E.هذا لا يحمل لي أبدًا.لا أستطيع أن أفهم سبب عدم موافقة محرري ومتصفحات HTML على عدم قبول أحرف أخرى غير A-Z و0-9.إذا كانت بعض البرامج النصية تحتاج إلى % و? وما إلى ذلك، فقم بتغيير تطبيقات البرمجة النصية بحيث تعمل باستخدام الحروف الأبجدية الرقمية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top