وظيفة PHP لتحويل "الوصف" التعسفي إلى بيانات XML صالحة لتغذية البودكاست

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

  •  02-10-2019
  •  | 
  •  

سؤال

أقرأ الوثائق لإنشاء موجز بودكاست مناسبة ل iTunes, ، و ال الأخطاء الشائعة القسم يقول:


باستخدام HTML المسماة كيانات الشخصية.

<! — illegal xml — >
<copyright>&copy; 2005 John Doe</copyright>

<! — valid xml — >
<copyright>&#xA9; 2005 John Doe</copyright>

على عكس لغة البرمجة, ، يدعم XML خمسة فقط "كيانات شخصية اسم":

character   name               xml
&           ampersand          &amp;
<           less-than sign     &lt;
>           greater-than sign  &gt;
’           apostrophe         &apos;
"           quotation          &quot;

الأحرف الخمسة أعلاه هي الشخصيات الوحيدة التي تتطلب الهروب في XML. يمكن إدخال جميع الأحرف الأخرى مباشرة في محرر يدعم UTF-8. يمكنك أيضًا استخدام مراجع أحرف رقمية تحدد Unicode للشخصية ، على سبيل المثال:

character   name                       xml
©           copyright sign             &#xA9;
℗           sound recording copyright  &#x2117;
™           trade mark sign            &#x2122;

لمزيد من المرجع انظر حرف XML و estityreferences.


الآن أنا أستخدم htmlentities() تحت PHP5 والتغذية هو التحقق من صحة ويعمل. لكن من ما أقوم بجمع بعض الأشياء التي يمكن أن تضع في المحتوى قد تصبح كيانات من شأنها أن تجعلها صالحة. ما هي أفضل وظيفة لاستخدامها للتأكد من أنني لا أتجاوز البيانات السيئة؟ أنا بجنون العظمة سوف يتم إدخال شيء ما وأحصل على كيان وحجم وكسر التغذية-إذا كنت فقط str_replace() واستبدل بكيانات مسماة واترك الباقي وحدها؟ أو يمكنني استخدام htmlspecialchars() بطريقة ما؟

باختصار ، ما هو بديل ل htmentities() سيؤكد ذلك التأكد من أن الإدخال آمن للوصف ، والعناوين ، وما إلى ذلك في تغذية RSS بودكاست؟

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

المحلول

يمكنك إما:

  • استخدم كتلة CDATA بدلاً من ذلك (فقط تأكد من استخدام الترميز الصحيح ، أي ترميز ملف XML يتطابق مع ترميز البيانات). التفكير الوحيد الذي يجب أن تبحث عنه ]]>, ، والتي لا يمكن وضعها حرفيا في كتلة CDATA.
  • يستخدم mb_encode_numericentity بدلاً من htmlentities (ربما جنبا إلى جنب مع htmlspecialchars وفك التشفير السابق لـ HTML ents with mb_convert_encoding).

إذا كان ترميز ملف XML UTF-8 ، فيمكنك إزالة الكيانات فقط. لنفترض أن لديك جزء HTML التالي:

&copy; 2005 John Doe

ثم ، يمكنك القيام فقط:

$data = "&copy; 2005 John Doe";
$data = mb_convert_encoding($data, "UTF-8", "HTML-ENTITIES");
$data = htmlspecialchars($data, ENT_NOQUOTES, "UTF-8");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top