Nokogiri :: xml :: Builder를 사용하여 HTML에 비 에스케이드 앰퍼 샌드를 추가하는 방법
문제
Nokogiri의 XML 빌더를 사용하여 HTML에 Bullet Points "•"와 같은 것을 추가하고 싶습니다. 그러나 모든 것이 탈출되고 있습니다. 탈출하는 것을 어떻게 방지합니까?
결과가 다음과 같습니다.
<span>•</span>
대신 :
<span>&#8226;</span>
나는 단지 이것을하고있다 :
xml.span {
xml.text "•\ "
}
내가 무엇을 놓치고 있습니까?
해결책
당신이 정의하는 경우
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 • entity?</span>
추신 깨끗한 솔루션을 위해서만 해결 방법 만 참조하십시오. libxml2
문서 (Nokogiri는 LIBXML2를 기반으로 구축) 더 많은 도움을 받으려면. 그러나이 사람들조차도 취급 엔티티가 꽤 꽤 ...
다른 팁
요소의 텍스트를 설정할 때 실제로 HTML 소스가 아닌 텍스트를 설정하는 것입니다. <
그리고 &
일반 텍스트에는 특별한 의미가 없습니다.
따라서 총알을 입력하십시오. '•'
. 물론 소스 코드와 XML 파일은 제대로 나오기 위해 동일한 인코딩을 사용해야합니다. XML 파일이 UTF-8이지만 소스 코드가 아닌 경우 '\xe2\x80\xa2'
이것은 문자열 문자로서 총알 문자의 UTF-8 바이트 시퀀스입니다.
(일반적으로 Ruby 1.8의 비 ASCII 문자는 까다 롭습니다. 바이트 기반 인터페이스는 XML의 All-Text-is-Unicode의 세계와 너무 잘 맞지 않습니다.)
제휴하지 않습니다 StackOverflow