Nokogiri :: xml :: Builder를 사용하여 HTML에 비 에스케이드 앰퍼 샌드를 추가하는 방법

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

문제

Nokogiri의 XML 빌더를 사용하여 HTML에 Bullet Points "•"와 같은 것을 추가하고 싶습니다. 그러나 모든 것이 탈출되고 있습니다. 탈출하는 것을 어떻게 방지합니까?

결과가 다음과 같습니다.

<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>

 

추신 깨끗한 솔루션을 위해서만 해결 방법 만 참조하십시오. libxml2 문서 (Nokogiri는 LIBXML2를 기반으로 구축) 더 많은 도움을 받으려면. 그러나이 사람들조차도 취급 엔티티가 꽤 꽤 ...

다른 팁

요소의 텍스트를 설정할 때 실제로 HTML 소스가 아닌 텍스트를 설정하는 것입니다. < 그리고 & 일반 텍스트에는 특별한 의미가 없습니다.

따라서 총알을 입력하십시오. '•'. 물론 소스 코드와 XML 파일은 제대로 나오기 위해 동일한 인코딩을 사용해야합니다. XML 파일이 UTF-8이지만 소스 코드가 아닌 경우 '\xe2\x80\xa2' 이것은 문자열 문자로서 총알 문자의 UTF-8 바이트 시퀀스입니다.

(일반적으로 Ruby 1.8의 비 ASCII 문자는 까다 롭습니다. 바이트 기반 인터페이스는 XML의 All-Text-is-Unicode의 세계와 너무 잘 맞지 않습니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top