كيفية إضافة غير هرب اقحام إلى HTML مع Nokogiri::XML::باني

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

سؤال

أود أن أضيف أشياء مثل النقاط "•" إلى HTML باستخدام XML باني في Nokogiri ، ولكن كل شيء يجري هرب.كيف يمكنني منعه من هرب ؟

أود أن تكون النتيجة:

<span>&#8226;</span> 

بدلا من:

<span>&amp;#8226;</span> 

أنا فقط أفعل هذا:

xml.span { 
  xml.text "&#8226;\ " 
}

ما أنا في عداد المفقودين ؟

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

المحلول

إذا قمت بتعريف

  class Nokogiri::XML::Builder
    def entity(code)
      doc = Nokogiri::XML("<?xml version='1.0'?><root>&##{code};</root>")
      insert(doc.root.children.first)
    end
  end

ثم هذا

  builder = Nokogiri::XML::Builder.new do |xml|
    xml.span {
      xml.text "I can has "
      xml.entity 8665
      xml.text " entity?"
    }
  end
  puts builder.to_xml

ينتج

<?xml version="1.0"?>
<span>I can has &#x2022; entity?</span>

 

PS هذا الحل فقط, نظيف الحل يرجى الرجوع إلى libxml2 الوثائق (Nokogiri بنيت على libxml2) للحصول على مزيد من المساعدة.ولكن حتى هؤلاء الناس أعترف أن التعامل مع الكيانات يمكن أن يكون تماما ..يخطئ ، مرهقة في بعض الأحيان.

نصائح أخرى

وعند الانتهاء من وضع نص عنصر، كنت حقا وضع النص، وليس مصدر HTML. < و& ليس لديهم أي معنى خاص في نص عادي.

وهكذا فقط اكتب رصاصة: '•'. بالطبع شفرة المصدر الخاصة بك وملف XML الخاصة بك وسوف يتعين استخدام نفس الترميز لذلك أن يخرج الحق. إذا كان ملف XML الخاص بك هو UTF-8 ولكن شفرة المصدر الخاصة بك ليست كذلك، وكنت على الارجح الى القول '\xe2\x80\xa2' وهو تسلسل بايت UTF-8 للحرف رصاصة كسلسلة حرفية.

و(في أحرف غير ASCII-العامة في روبي 1.8 هي صعبة. واجهات القائم بايت لا تنسق جيدا مع العالم XML لجميع النص هو بين يونيكود).

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