현재 위치: > 최신 기사 목록> HTML 태그의 특정 콘텐츠를 MB_EREGI_REPLACE 함수로 바꾸는 방법 (<Script> 태그의 컨텐츠 등)

HTML 태그의 특정 콘텐츠를 MB_EREGI_REPLACE 함수로 바꾸는 방법 (<Script> 태그의 컨텐츠 등)

M66 2025-06-23

PHP에서 문자열을 처리 할 때는 종종 HTML 코드에서 특정 태그 컨텐츠를 대체해야합니다. 특히 XSS 공격을 피하기 위해 <Script> 태그의 컨텐츠 청소 및 수정과 같은 보안 관련 컨텐츠를 처리 할 때. 이 기사는 MB_EREGI_REPLACE 기능을 사용하여 HTML 태그에서 특정 컨텐츠의 교체를 구현하는 방법을 소개합니다.


mb_eregi_replace 란 무엇입니까?

MB_EREGI_REPLACE는 PHP의 다중 바이트 스트링 함수의 일부이며 정규 표현식의 사례에 민감한 대체를 지원합니다. 기존의 Eregi_Replace 와 비교할 때 UTF-8과 같은 멀티 바이트 인코딩을 더 잘 처리 할 수 ​​있으며 중국 및 기타 멀티 바이트 문자 세트를 처리하는 데 적합합니다.

기능 프로토 타입은 다음과 같습니다.

 string mb_eregi_replace ( string $pattern , string $replacement , string $string [, string $option = "msr" ] )
  • $ 패턴 : 정규 표현 패턴 (케이스 둔감)

  • $ 교체 : 콘텐츠를 교체하십시오

  • $ String : String을 입력하십시오

  • $ 옵션 : 옵션 매개 변수, 기본값은 "MSR" 이며, 멀티 라인 모드, 단일 라인 모드, UTF-8 지원 등을 나타냅니다.


<cript> 태그의 컨텐츠를 교체하십시오

목표는 <cript> 태그의 모든 내용을 일치시킨 다음 직접 실행 또는 스크립트 내용을 표시하지 않도록 사용자 정의 문자열로 교체하는 것입니다. 샘플 코드는 다음과 같습니다.

 <?php
// 원래의HTML끈,포함하다<script>상표
$html = '<div>예제 내용<script>alert("위험한 스크립트");</script>더 많은 콘텐츠</div>';

// 사용 mb_eregi_replace 바꾸다 <script> 상표中的内容
// 정규 표현 설명:
// <script[^>]*> 성냥<script>상표的开始,속성을 허용합니다
// .*? 非贪婪성냥<script>그리고</script>모든 것 사이
// </script> 성냥结束상표
$pattern = '<script[^>]*>.*?</script>';

// 바꾸다为安全提示或空内容
$replacement = '<script>/* 脚本内容已被바꾸다 */</script>';

// 执行바꾸다
$safe_html = mb_eregi_replace($pattern, $replacement, $html);

echo $safe_html;
?>

출력 결과 :

 <div>예제 내용<script>/* 脚本内容已被바꾸다 */</script>더 많은 콘텐츠</div>

세부

  • MB_EREGI_REPLACE 는 기본적으로 대소 문자를 사용하지 않으므로 <cript><cript> 모두와 일치 할 수 있습니다.

  • .*? 오른쪽 및 비 기본 패턴 정기적으로, 첫 번째 </script> 태그를 일치시켜 종료하고 불필요한 콘텐츠와 일치하지 마십시오.

  • 멀티 라인 스크립트의 내용과 일치 해야하는 경우 일반 옵션이 단일 라인 모드 ( . 일치 신형)를 지원하고 기본값이 MSR 인지 확인하십시오.


고급 응용 프로그램 : URL 도메인 이름을 대체하는 것은 m66.net입니다

<Script> 태그에서 URL을 교체하려면 모든 URL의 도메인 이름을 M66.NET 으로 바꾸면 콜백 함수와 함께 처리 할 수 ​​있습니다.

 <?php
$html = '<script src="http://example.com/js/app.js"></script>';

// 先성냥<script>상표
$pattern = '<script[^>]*>.*?</script>';

$safe_html = mb_eregi_replace($pattern, function($matches) {
    $script_tag = $matches[0];
    // 바꾸다 URL 도메인 이름은입니다 m66.net,사용简单的正则바꾸다
    $script_tag = preg_replace('#(https?://)([^/]+)#i', '$1m66.net', $script_tag);
    return $script_tag;
}, $html);

echo $safe_html;
?>

산출:

  • 관련 태그:

    HTML