은">"(U+003E GREATER-이상호)내에서 허용하는 html 요소 속성 값은?

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

  •  01-07-2019
  •  | 
  •  

문제

다시 말해서도 하나 사용 /<tag[^>]*>.*?<\/tag>/ regex 치 tag html 요소를 포함하지 않는 중첩 tag 요소는?

예를 들어(lt.html):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <title>greater than sign in attribute value</title>
  </head>
  <body>
    <div>1</div>
    <div title=">">2</div>
  </body>
</html>

Regex:

$ perl -nE"say $1 if m~<div[^>]*>(.*?)</div>~" lt.html

과 스크린-스크레이퍼:

#!/usr/bin/env python
import sys
import BeautifulSoup

soup = BeautifulSoup.BeautifulSoup(sys.stdin)
for div in soup.findAll('div'):
    print div.string


$ python lt.py <lt.html

모두 동일한 출력:

1
">2

예상 출력:

1
2

w3c 말합니다:

특성 값은 혼합물의 텍스트 과 캐릭터를 참조하는 경우를 제외하고, 추가적인 제한 사항 텍스트 포함할 수 없습니다 모 앰퍼샌드.

도움이 되었습니까?

해결책

네,그것이 허용하는(W3C 검사기지 그것만이 문제가 경고).

이스케이프 <> 또한 허용된 내부 의견이기 때문에,이러한 간단한 regexp 할 수 있는 바보짓을 할 수 있습니다.

는 경우 BeautifulSoup 지 않을 처리할 수 있는 버그 또는 아마도 의식적인 디자인이 결정을 더 탄력있는 누락에 닫에 따옴표 속성이 있습니다.

다른 팁

내가 믿는 그의 유효와 W3C 검사기 동의하고,그러나 신뢰할 수 있는 소스에 대한 이 정보는 ISO8879:1986 기준,비용~150EUR/210USD.에 관계없이,그것은 잘못을 인코딩하는,그래서 의심스러운 경우 인코딩.또한,사용하는 경우에는 XML 기반의 문서 형식 필요하신을 인코딩하는 기호에서 순서 ]]>.

리터럴 > 법적 어디에서나 html 콘텐츠 안에 특성 값과 같은 텍스트 요소 내에서.

을 읽은 후에 다음과 같다:

http://www.w3.org/International/questions/qa-escapes

그것은 다음과 같은 엔터티 이스케이프는 제안된 어디서나(을 포함한 특성에서)한 < >와&

당신이 주장하는 경우에 정규 표현식을 사용하여(이에 적절한 기본 문자열 작업)을 사용하여 시험 <tag((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)>.*?<\/tag>.치해야 한다는 속성을 완벽하게 따라서 액세스할 수 있도록 합 안 콘텐츠(지만 당신은 그것을 둘 필요가에서 캡처 그룹).

사용할 수도 있습니다 Html 민첩성 Pack 에 대한 구문 분석 HTML 권하고 싶다면 당신이해야 할 많은의 분석.유지 큰 정기적인 표현을 쉽게 될 수 있다는 두통이지만,그 사이에 그들은 또한 훨씬 더 효과적인 경우는 그렇게 할 수 있습니다.

yeah except /<tag[^>]*>.*?<\/tag>/

이 일치하지 않을 하나의 태그하지만,일 처음 시작 태그와 마지막 끝 태그를 주는 태그이다.처럼 당신의 첫 번째 비 욕심 tag-치 사이에 작성해야 합 non-greedy as well.

당신 같은 결과를 얻을 사용하여>대신>

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