سؤال

واجهت سلسلة معينة (أنها ليست قابلة للطباعة تماما، ولكن يمكنك أن ترى ذلك أدناه) يؤدي إلى إرجاع HTMLSPecialChars () لإرجاع سلسلة طول الصفر.هل هناك أي طريقة يمكن أن تكون ثابتة؟

giveacodicetagpre.

الإخراج:

giveacodicetagpre.

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

المحلول

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

على دليل PHP صفحة ل HTMLSPecialChars :

إذا كانت سلسلة الإدخال تحتوي على تسلسل وحدة رمز غير صالح داخل ترميز معين سيتم إرجاع سلسلة فارغة، إلا إذا تم تعيين أي إشارات Ent_ignore أو Ent_Substitute.

ثم أسأل نفسي ما هو "غير صالح" حول هذه السلسلة؟ على ويكي صفحة ل UTF-8 يعطي مخططا جيدا من UTF- 8 ترميز. جميع codepoints تمثل "النص العادي ASCII" سيكون 0-127 (MSB في البايت هو دائما 0).

إذا كان MSB بايت هو 1 (عشري 128 إلى 255) يروي محلل توافق UTF-8 الذي يتكون CodePoint من سلسلة متعددة البايات. و next يجب أن يكون أول اثنين من البتات الأهمية الأولى تليها 0.

بوضوح في هذه السلسلة، هناك حالة حيث يزيد بايت أكثر من 127، ولا يبدأ البايت التالي ب 1 و 0. لذلك فهو ترميز UTF-8 غير صالح.

شكرا على هذا المنشور بالنسبة للقرار، الذي في رأيي هو استخدام علم ENT_SUBSTITUTTUTTUTE (أو أفترض أن unt_ignore إذا كنت متأكدا من أن حذف هذه البايتات غير المطابقة لن يكون مشكلة أمان ).

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