2010-11-18 1 views
3

의 데이터가 HTML 형식으로 표시되고 서버에 제출되어 일부 사전 처리가 수행됩니다.닫히지 않은 img 태그

"img"태그의 "src"속성으로 작동합니다.

사전 처리 및 저장 후 모든 사전 처리 된 "img"태그는 자동으로 닫히지 않습니다.

예를 들어

, 만약 "IMG"태그는 다음되었습니다

<img src="image.png" /> 

를 노코 기리 또는 Hpricot을 함께 전처리 후, 그것은 것입니다 :

<img src="/preprocessed_path/image.png"> 

코드하는 것은 매우 간단하다 :

doc = Hpricot(self.content) 
doc.search("img").each do |tag| 
    preprocess tag 
end 
self.content = doc.to_html 

Nokorigi의 경우 동일하게 보입니다.

이 문제를 해결하는 방법?


업데이트 1

는 언급하는 것을 잊지 - 내가 W3C Validator과 유효성을 확인하기 위해 노력하고있어 HTML 5 페이지를 가지고있다. 다음에 대한

"IMG"태그가 DIV 안에, 그것은 불만 :

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta charset="UTF-8" /> 
</head> 
<body> 
    <div> 
     <img src="image.png"> 
    </div> 
</body> 
</html> 

당신은 같은 오류가 발생합니다 :

required character (found d) (expected i) 
</div> 

예를 들어, 다음 코드 유효성을 검사 할

Line 9, Column 4: required character (found d) (expected i) 
</div> 

답변

3

난 문제가 귀하의 <html> xmlns 속성을 XHTML로 delcares 생각합니다. XHTML 문서가 아니라는 사실과 모순되는 것처럼 보입니다. 이 xmlns 속성을 제거하면 유효해야합니다.

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8" /> 
    <title>something here</title> 
</head> 
<body> 
    <div> 
    <img src="image.png"> 
    </div> 
</body> 
</html> 
+0

오, 고마워! 나는이 네임 스페이스를 완전히 잊었다. 복사 - 붙여 넣기가 끝난 후 몇 달 전에 완료되었습니다. – AntonAL

0

위임 할 전처리 기능에서 각 img 태그를 제어 할 수 없습니까? 이미 반환 된 것을 반환하고 명시적인 종료 태그를 추가 할 수 있습니까?

+0

물론, 난 등 복잡한 정규 표현식을 사용하여 손으로 모든 것을 분석 할 수 있지만,이 작업은 라이브러리까지해야, 내가 – AntonAL

2

문제는 라이브러리가 올바른 HTML을 생성하고 HTML에서 후행 "/"가 올바르지 않다는 것입니다. application/xhtml + xml을 제공하지 않는 한, IMG 태그는 모든 HTML 버전에서 자동으로 닫히고 "/"는 의미가 없습니다. /xhtml + xml 인 경우 Nokogiri의 to_xhtml을 명시 적으로 사용해야합니다.

+0

을 사용하고 내 질문 – AntonAL

+0

@AntonAL에 업데이트 1 참조 : 그래서 당신은 봉사 HTML 대신 XHTML. 말했듯이,이 경우 HTML 대신 XHTML을 생성해야합니다. 또는 HTML을 사용하십시오. 당신은 단지 하나를 골라서 붙잡아 야합니다. – Chuck