كيف يمكنني إصلاح أحرف HTML غير صالحة في الصفحات المقدمة مع تشفير مختلف؟

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

سؤال

لديّ عدد من المواقع الإلكترونية التي تجعل أحرفًا غير صالحة. تحدد علامات التعريف الخاصة بالصفحات ترميز UTF-8. ومع ذلك ، يحتوي عدد من الصفحات على أحرف لا يمكن تفسيرها بواسطة UTF-8 ، ربما لأن الملفات تم حفظها مع تشفير آخر (مثل ANSI). الشخص على وجه الخصوص أشعر بالقلق حياله الآن هو علامة اقتباسية رائعة (كما هو الحال في "بوب"... آسف إذا لم يظهر ذلك بشكل صحيح). يشير مصدق W3 إلى أن الكيان" "x92"، لكنه لن يتم التحقق من صحة الملف لأنه لا يخطط لونيكود. وبالطبع ، إذا فتحت الملف في Notepad ++ وتغيير الترميز إلى UTF-8 ، يتم استبدال الحرف بـ 92 باللون الأسود علبة.

هذا هو سؤالي: ما هي أسهل طريقة لإصلاح هذا؟ هل يجب علي فتح جميع الصفحات واستبدال تلك الشخصية بمحفات أحكام فاصلة تقليدية؟ أم أن هناك حلًا سريعًا يمكنني إضافته (على سبيل المثال ، إلى IIS) قد يتجاوز أو إصلاح مشكلة الترميز؟ أو هل يجب عليّ العثور على/استبدال القوة الغاشمة؟ لدي مئات الصفحات على هذه المواقع وليس لدي أي فكرة عن عددهم الذي يجب أن أغيره ، لذلك إذا كان أي شخص يعرف طريقة يمكنني إما التحايل على هذه المشكلة أو إصلاحها بسرعة ، فسأقدرها.

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

المحلول

هل تخدم الصفحات كـ HTML مستقيمة ، أو هل لديك برنامج نصي آخر يقدم المحتوى؟ إذا كان لديك برنامج نصي يخدم المحتوى ، فقد يبحث هذا البرنامج النصي عن أي مثيل من x92 واستبداله بمحاسبة. في PHP سيكون هذا str_replace () بسيط

إذا كنت تقدم HTML مستقيمة ، فسيتعين عليك تعديل الملفات نفسها فعليًا. يمكن أن يكون هذا مؤتمراً ، ومع ذلك (وربما يجب أن يكون إذا كان لديك مئات الملفات) اعتمادًا على الأدوات التي تتوفر لك ونظام التشغيل الذي أنت فيه. بما أنك قلت إنك تستخدم Notepad ++ أفترض أنه من الآمن افتراض أن تفترض أنت في MS Windows (وبالتالي لا توجد أوامر UNIX ممتعة لتسريع الأمور)

قد يكون من الممكن إنشاء برنامج نصي دفعي يمكنه القيام بذلك. هناك أدوات تحرير نص ASCII بسيطة للغاية مدمجة في موجه الأوامر. إذا لم يكن ذلك ممكنًا ، فمن الممكن جدًا إنشاء برنامج C أو C ++ للقيام بذلك إذا كان لديك مترجم على نظامك ومعرفتك المعتدلة بـ C. مصدر لك.

نصائح أخرى

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

حظا طيبا وفقك الله

لقد واجهت قضية مماثلة حيث دخلت بعض المساحات "XA0" في مستند UTF-8 المفترض. في Notepad ++ يتم عرض هذه في صندوق أسود مع "XA0" مكتوبة فيه. ومع ذلك ، لا يسمح Notepad ++ بنسخها أو لصقها.

لقد أجريت القليل من البحث واكتشفت ما يجري. يكشف محرر Hex أنه يتم تشفيرها على أنها بايت واحد: "A0" وهو UTF-8 غير صالح. يجب أن يكون أي شيء لا ASCII بايتان على الأقل ، وبالتالي فإن الترميز المناسب هو "C2 A0" في سداسي عشري.

لمثالك الفاصلة الفاصلة الفاخرة ، أنت تتعامل مع نفس الشيء. في الواقع ، تكون مشكلتك أكثر تعقيدًا لأنه في حرف ASCII الممتد x92 (عشري 146) هو علامة اقتصادية ولكن في Unicode x92 هي حرف تحكم ويجب أن يكون الاقتباس المنفرد الصحيح U+2019 (العشري 8217). إن إضافة هذا الرمز في Notepad ++ (عبر لوحة الأحرف>) والتفتيش في محرر Hex يكشف أن الترميز السداسي السداسي هو "E2 80 99" والذي في الثنائي هو 11100010 10000000 10011001. عندما تقوم بإزالة وحدات التحكم في UTF-8 (غير جريئة) ، فإن هذا يؤدي إلى 0010 0000 0000 0001 1001 والتي تساوي قيمة عشرية 8217.

تتمثل الطريقة المناسبة للتعامل مع هذا لفتح ملفك كدفق بايت (char غير موقّع * في C) والبحث عن تسلسل UTF-8 غير لائق. ثم يمكنك إما استبدالها بـ � (انظر https://en.wikipedia.org/wiki/Utf-8#invalid_byte_equences) أو يمكنك محاولة التعامل معها ، من خلال إجراء بدائل مثل A0 -> C2 A0 (مساحة كسر غير مشفرة بشكل غير صحيح) و 92 -> E2 80 99 (علامة اقتباس منفردة مشفرة بشكل غير صحيح).

يجب ترميز جميع المشاركات الخاصة HTML ، على سبيل المثال ، يجب أن يكون رمز حقوق الطبع والنشر في HTML الخاص بك

©

قائمة كيان HTML:

http://www.w3schools.com/html/html_entities.asp

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

Server.HTMLEncode("string with special chars")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top