HTML 인코딩 태그를 제거하기 위해 정규 표현식 또는 기능을 도와 줄 수 있습니까?

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

  •  06-07-2019
  •  | 
  •  

문제

데이터베이스 레코드에서 인코딩 된 HTML 태그를 제거 할 수있는 Regex 또는 기능이 필요합니다. 인코딩 된 HTML로 (tinymce에서) 저장되는 데이터베이스에 텍스트가 있습니다.

코드는 '미만'이 있습니다. 그리고 '더 큰'; 태그가 인코딩되었습니다.

인코딩 된 모든 태그와 HTML을 제거하고 일반 텍스트와 공간 만 남겨두고 싶습니다.

도움이 되었습니까?

해결책

나는 사용자가 당신을 고려할 수있는 모든 HTML을 다룰 수있는 무언가를 생각해내는 것이 정규직 직원을 영구적으로 바쁘게 유지할 수있는 과제입니다.

대신, 이미 제시된 PHP 기능에 의존하는 두 가지 정지 접근법이 더 나은 선택입니다.

먼저, 인코딩 된 HTML 엔티티를 다시 징후보다 더 크고 적은 것으로 바꾸겠습니다. htmlspecialchars_decode.

$string = htmlspecialchars_decode($string);

이것은 우리에게 적절한 HTML을 줄 것입니다. (인용문이 여전히 인코딩 된 경우 링크 된 문서의 두 번째 인수를 참조하십시오).

마무리하려면 PHP 기능 Strip_tags로 HTML 태그를 제거합니다. 이렇게하면 소스에서 모든 HTML 태그가 제거됩니다.

$string = strip_tags($string);

함수/메소드로 싸서

function decodeAndStripHTML($string){
    return strip_tags(htmlspecialchars_decode($string));
}

다른 팁

번역해야 할 것 같습니다 &lt; 에게 < 그리고 &gt; 에게 > 그런 다음 HTML 파서를 사용하여 텍스트를 추출하십시오 (후자는 정기적 인 표현으로 수행 할 수 없습니다).

당신은 또한이 라이브러리에 관심이있을 수 있습니다 HTML 정화기.

그들은 말하고 나는 다음과 같이 말합니다.

HTML 정화기는 PHP로 작성된 표준 호환 HTML 필터 라이브러리입니다. HTML Purifier는 철저하게 감사하고 안전하지만 허용되는 화이트리스트를 사용하여 모든 악성 코드 (XSS로 더 잘 알려짐)를 제거 할뿐만 아니라 문서가 표준을 준수하는지 확인하고 W3C 사양에 대한 포괄적 인 지식으로 만 달성 할 수 있습니다. 부족하거나 안전하지 않은 HTML 필터의 현재 환경으로 인해 BBCode 사용에 지쳤습니까? Wysiwyg 편집기가 있지만 사용할 수 없었습니까? 구축하는 응용 프로그램에 대한 고품질의 표준 준수, 오픈 소스 구성 요소를 찾고 계십니까? HTML 청정기는 당신을위한 것입니다!

HTML Regex를 제거하십시오

Alan Storm에 대한 응답으로 : 불행히도 JavaScript 유효성 검사를 사용한 웹 응용 프로그램을위한 전임 직원 (HAHA)이었습니다.

다음은 내가 쓴 JavaScript Regex입니다. 나는 그것이 청소 될 수 있다고 확신합니다.

var regex =

/(&#[0-9];) | (& [a-za-z0-9;) | (<[/]? ?>)/g;

여기서 [d 또는 $ amp; 또는 또는] 또는 앵글 브래킷 내부의 모든 것이 일치하고 강조되었으며 결국 사용자를 위해 제거되었습니다.

-사이드 참고 : 사용자에 대한 생각을 믿지는 않지만이 regex가 필요했습니다.

&lt;.*?&gt;

나는 보통 이것을 사용합니다 \s*?<.*?>\s*? 모든 HTML 태그와 일치합니다. 사용할 수있는 엔티티에 인코딩 된 태그를 제거하려면 사용할 수 있습니다 \s*?&lt;.*?&gt;\s*?

s는 흰색 공간과 일치합니다. (dot)은 어떤 캐릭터와 일치합니다. * * 이전 문자의 0 이상을 의미합니다. *와 함께 * 게으른 (upreedy)를 결합합니다.

사용중인 언어에 따라 표현이 작동하기 위해 추가 백 슬래시를 추가해야 할 수도 있습니다. 내가 착각하지 않으면 PHP는 다음과 같은 두 번째 백 슬래시가 필요합니다. \\s*?<.*?>\\s*?

그러나 텍스트에 HTML 태그가 아닌 문자보다 크고 적은 경우 (예 : 수학 방정식) 문제가 발생합니다. 이 경우 더 정교하고 덜 간단한 정규식이 필요합니다.

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