php教程 PHP开发 PHP HTML 코드 문자열 차단 구현 코드

PHP HTML 코드 문자열 차단 구현 코드

Dec 14, 2016 pm 01:19 PM

제공된 데이터는 다음과 같은 HTML 코드 문자열입니다.

Zhang San은 Li Si기사를 공유했습니다. 긴 문자열

인 경우 div 태그 내부의 콘텐츠를 가로채고 HTML 태그를 유지하며 그 안의 텍스트만 처리해야 합니다. 예를 들어 "lee思"에서 "lee"라는 단어를 그냥 가로챌 수도 있는데 이렇게 프런트엔드에 넣으면 "lee思" 앞에 있는 a 태그가 닫히지 않게 되므로 가로채고 난 후에는 HTML 구문이 올바른지 확인해야 합니다.

이 문제는 정말 해결하기 쉽지 않아서 이틀간 우울했어요. 이것은 단지 문자열이지만 내용은 HTML 코드이고 DOM이 없다는 점에 유의하십시오. 프런트 엔드에서 처리하면 더 쉬울 것입니다. DOM을 직접 얻은 다음 내부 노드를 처리하고 최종적으로 innerHTML과 같은 것을 출력할 수 있습니다. 지금은 안 돼요. 마음을 바꿔야 해요. 내 동료의 생각은 다음과 같습니다.

문자열의 각 문자를 탐색합니다. 태그를 설정하고 태그 시작 부분에서 < 태그를 발견하면 1로 설정합니다. 다음 문자는 계산되지 않으며 >를 만난 후에 계산을 시작합니다. 레이블 내부의 문자열을 처리할 때 먼저 현재 문자 인코딩이 중국어인지 여부를 확인해야 합니다. 일반적으로 PHP에서 UTF-8로 인코딩된 한자의 길이는 3이므로 한자 인코딩을 만나면 셀 수 없는 두 개는 건너뛰고... 이때부터 머리가 커지기 시작합니다. 개인적으로 이 방법은 매우 불쾌하다고 생각합니다. 우선 이런 정교한 논리는 제어하기가 쉽지 않으며 UFT-8 인코딩에서 생성된 중국어의 길이는 3 또는 4일 수 있으므로 코드의 엄격성이 의심됩니다. .

저의 개인적인 생각은 Tidy를 사용하는 것입니다(구체적인 사용법은 PHP 매뉴얼을 참조하세요). 어제 Tidy를 공부했는데 이것이 꽤 유용하다는 것을 알았습니다. 먼저 이 문자열을 다음과 같이 Tidy 객체로 변환합니다.

$tidy = tidy_parse_string($str, array(), 'utf8′) // 마지막은 인코딩을 설정하는 것입니다. utf-8이 아닌 utf8이며 중간 연결이 없습니다.

그런 다음 $tidy에서 본문을 가져옵니다(변환 후 $tidy는 와 같은 태그를 자동으로 추가하기 때문입니다).

$body = tidy_get_body($tidy) ;

이때 var_dump를 사용하여 일부 $body 구조를 살펴보면 각 태그를 해당 속성을 가진 해당 개체로 변환하는 것을 볼 수 있습니다. 예를 들어 sdf와 같은 문에 해당하는 일부 속성은 다음과 같습니다.

name=>”a”
value => "
sdf"
child=> 배열{[0]=>텍스트 노드 객체, 값은 sdf}
속성=배열{"href ”=>”#”}
…..기타 속성

보시다시피 실제로 a 레이블에 해당하는 노드 아래의 텍스트 노드 값을 별도로 처리할 수 있습니다. HTML 무결성은 파괴되지 않습니다. 원래는 a 태그의 text 노드 값을 변경하면 그에 따라 a 태그의 값도 변경되는 줄 알았는데, 그럴 경우에는 a 태그에 해당하는 노드의 값을 직접 반환하면 괜찮을 것 같습니다. 태그가 그럴 것이라고는 예상하지 못했습니다. 그래서 그 안에 있는 텍스트를 처리했습니다. 그런 다음 새 HTML을 직접 작성해야 합니다.

Tidy 객체의 구조를 알고 나면 모든 노드를 순회하기만 하면 됩니다. 이를 위해서는 div 태그를 찾은 다음 내부 노드 처리를 시작하면 됩니다. 코드는 다음과 같습니다:

if(mb_strwidth($subchild->value, 'utf-8′) >= $len)
{
$subchild->value = mb_strimwidth ($subchild ->value, 0, $len, '…', 'utf-8′);
$trimed_str .= $subchild->value;
break;
}
else
{
$trimed_str .= $subchild->value;
$len = $len - mb_strwidth($subchild->value, 'utf-8′);
}

내부의 $subchild는 하위 노드입니다. 여기서는 mb_strwidth를 사용하여 문자열 길이를 구합니다. 나는 이 mb_strwidth를 강력히 추천합니다. 매우 유용합니다. 중국어를 두 문자 길이로 처리하므로 여기의 요구 사항을 정확히 충족합니다! 또한, 문자열을 가로챌 때 mb_strimwidth가 사용됩니다. 이 함수는 중국어도 2개의 문자 길이로 처리합니다. mb_로 시작하는 함수는 정말 사용하기 쉽습니다.

요구사항에 따라 작성된 것이지 보편적인 형태로 만들어진 것이 아니기 때문에 구체적인 코드는 작성하지 않겠습니다. 언젠가는 그것을 보편적으로 만들어 출판할 시간이 있을 것이다.

또한 FireFox가 text-overflow 속성을 지원하지 않는다는 점이 아쉽습니다. 그렇지 않으면 백그라운드에서 텍스트를 자르기 위해 그렇게 열심히 노력할 필요가 없습니다. 더 좋은 방법이 있다면 토론 메시지를 남겨주시면 더 많은 관련 글을 보실 수 있으니 PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

HTML의 테이블 테두리 HTML의 테이블 테두리 Sep 04, 2024 pm 04:49 PM

HTML의 테이블 테두리 안내. 여기에서는 HTML의 테이블 테두리 예제를 사용하여 테이블 테두리를 정의하는 여러 가지 방법을 논의합니다.

HTML 여백-왼쪽 HTML 여백-왼쪽 Sep 04, 2024 pm 04:48 PM

HTML 여백-왼쪽 안내. 여기에서는 HTML margin-left에 대한 간략한 개요와 코드 구현과 함께 예제를 논의합니다.

HTML의 중첩 테이블 HTML의 중첩 테이블 Sep 04, 2024 pm 04:49 PM

HTML의 Nested Table에 대한 안내입니다. 여기에서는 각 예와 함께 테이블 내에 테이블을 만드는 방법을 설명합니다.

HTML 테이블 레이아웃 HTML 테이블 레이아웃 Sep 04, 2024 pm 04:54 PM

HTML 테이블 레이아웃 안내. 여기에서는 HTML 테이블 레이아웃의 값에 대해 예제 및 출력 n 세부 사항과 함께 논의합니다.

HTML 입력 자리 표시자 HTML 입력 자리 표시자 Sep 04, 2024 pm 04:54 PM

HTML 입력 자리 표시자 안내. 여기서는 코드 및 출력과 함께 HTML 입력 자리 표시자의 예를 논의합니다.

HTML 정렬 목록 HTML 정렬 목록 Sep 04, 2024 pm 04:43 PM

HTML 순서 목록에 대한 안내입니다. 여기서는 HTML Ordered 목록 및 유형에 대한 소개와 각각의 예에 대해서도 설명합니다.

HTML에서 텍스트 이동 HTML에서 텍스트 이동 Sep 04, 2024 pm 04:45 PM

HTML에서 텍스트 이동 안내. 여기서는 Marquee 태그가 구문과 함께 작동하는 방식과 구현할 예제에 대해 소개합니다.

HTML 온클릭 버튼 HTML 온클릭 버튼 Sep 04, 2024 pm 04:49 PM

HTML onclick 버튼에 대한 안내입니다. 여기에서는 각각의 소개, 작업, 예제 및 다양한 이벤트의 onclick 이벤트에 대해 설명합니다.

See all articles