وظيفة PHP لتحويل "الوصف" التعسفي إلى بيانات XML صالحة لتغذية البودكاست
-
02-10-2019 - |
سؤال
أقرأ الوثائق لإنشاء موجز بودكاست مناسبة ل iTunes, ، و ال الأخطاء الشائعة القسم يقول:
باستخدام HTML المسماة كيانات الشخصية.
<! — illegal xml — >
<copyright>© 2005 John Doe</copyright>
<! — valid xml — >
<copyright>© 2005 John Doe</copyright>
على عكس لغة البرمجة, ، يدعم XML خمسة فقط "كيانات شخصية اسم":
character name xml
& ampersand &
< less-than sign <
> greater-than sign >
’ apostrophe '
" quotation "
الأحرف الخمسة أعلاه هي الشخصيات الوحيدة التي تتطلب الهروب في XML. يمكن إدخال جميع الأحرف الأخرى مباشرة في محرر يدعم UTF-8. يمكنك أيضًا استخدام مراجع أحرف رقمية تحدد Unicode للشخصية ، على سبيل المثال:
character name xml
© copyright sign ©
℗ sound recording copyright ℗
™ trade mark sign ™
لمزيد من المرجع انظر حرف XML و estityreferences.
الآن أنا أستخدم htmlentities()
تحت PHP5 والتغذية هو التحقق من صحة ويعمل. لكن من ما أقوم بجمع بعض الأشياء التي يمكن أن تضع في المحتوى قد تصبح كيانات من شأنها أن تجعلها صالحة. ما هي أفضل وظيفة لاستخدامها للتأكد من أنني لا أتجاوز البيانات السيئة؟ أنا بجنون العظمة سوف يتم إدخال شيء ما وأحصل على كيان وحجم وكسر التغذية-إذا كنت فقط str_replace()
واستبدل بكيانات مسماة واترك الباقي وحدها؟ أو يمكنني استخدام htmlspecialchars()
بطريقة ما؟
باختصار ، ما هو بديل ل htmentities()
سيؤكد ذلك التأكد من أن الإدخال آمن للوصف ، والعناوين ، وما إلى ذلك في تغذية RSS بودكاست؟
المحلول
يمكنك إما:
- استخدم كتلة CDATA بدلاً من ذلك (فقط تأكد من استخدام الترميز الصحيح ، أي ترميز ملف XML يتطابق مع ترميز البيانات). التفكير الوحيد الذي يجب أن تبحث عنه
]]>
, ، والتي لا يمكن وضعها حرفيا في كتلة CDATA. - يستخدم
mb_encode_numericentity
بدلاً منhtmlentities
(ربما جنبا إلى جنب معhtmlspecialchars
وفك التشفير السابق لـ HTML ents withmb_convert_encoding
).
إذا كان ترميز ملف XML UTF-8 ، فيمكنك إزالة الكيانات فقط. لنفترض أن لديك جزء HTML التالي:
© 2005 John Doe
ثم ، يمكنك القيام فقط:
$data = "© 2005 John Doe";
$data = mb_convert_encoding($data, "UTF-8", "HTML-ENTITIES");
$data = htmlspecialchars($data, ENT_NOQUOTES, "UTF-8");