현재 위치: > 최신 기사 목록> 일반 표현식을 사용하여 사용자 입력에서 특수 문자를 지우십시오.

일반 표현식을 사용하여 사용자 입력에서 특수 문자를 지우십시오.

M66 2025-06-05

사용자 입력 처리, 특히 다중 바이트 문자 (예 : 중국어, 일본어 및 한국)와 관련된 언어의 관점에서 표준 정규 표현 기능을 사용하면 문자 자리 또는 일치 오류가 발생할 수 있습니다. 이 문제를 해결하기 위해 PHP는 다중 바이트 호환 기능 MB_EREGI_REPLACE을 제공합니다.이 문제는 문자 인코딩을 깨지 않고 특정 일반 패턴으로 일치하는 컨텐츠를 대체하는 데 사용할 수 있습니다.

mb_eregi_replace 소개

MB_EREGI_REPLACEMBString 확장의 함수로 정규 표현식과 일치하는 하위 문자열을 검색하고 지정된 컨텐츠로 대체하는 데 비판적입니다. 구문은 다음과 같습니다.

 string mb_eregi_replace(string $pattern, string $replacement, string $string [, string $option])
  • $ 패턴 : 정규 표현 패턴.

  • $ 교체 : 경기를 대체하는 데 사용되는 문자열.

  • $ string : 처리 할 원래 문자열입니다.

  • $ 옵션 : 선택적 문자 인코딩.

특수 문자를 청소하기위한 실제 사례

많은 응용 프로그램 시나리오에서 사용자 입력에는 @, #, $, %, ^, & 등과 같은 특수 문자가 포함될 수 있습니다. 이러한 문자는 제한없이 보안 문제 또는 데이터 일관성 문제를 일으킬 수 있습니다. MB_EREGI_REPLAPE 를 통해 함수를 작성 하여이 문자를 지울 수 있습니다.

샘플 코드 :

 function sanitize_input($input) {
    // 정규 표현:편지를 유지하십시오、숫자、공간과 중국어,나머지를 비어 놓은 것으로 교체하십시오
    $pattern = '[^a-zA-Z0-9\x{4e00}-\x{9fa5}\s]';
    $replacement = '';
    return mb_eregi_replace($pattern, $replacement, $input, 'UTF-8');
}

// 테스트 샘플
$user_input = "방문에 오신 것을 환영합니다 m66.net!이것은 a입니다@#시험$%입력하다^&콘텐츠。";
$clean_input = sanitize_input($user_input);
echo $clean_input;

출력 결과 :

 방문에 오신 것을 환영합니다 m66net이것은 a입니다시험입력하다콘텐츠

이 예에서는 유니 코드 호환 정규 표현식을 사용하여 중국어 및 영어 문자가 아닌 모든 문자, 숫자 및 공백을 MB_EREGI_REPLATE를 통해 비어 있습니다. 중국어 \ x {4e00}-\ x {9fa5} 의 범위는 'UTF-8' 인코딩 사양과 함께 사용해야한다는 점은 주목할 가치가 있습니다.

주목해야 할 것

  1. 성능 문제 : MB_EREGI_REPLACEMBString 확장을 기반으로 한 일반 기능으로, 많은 양의 텍스트를 처리 할 때 비효율적입니다. 멀티 바이트 문자 지원이 필요한 경우에만 사용하는 것이 좋습니다.

  2. 문자 인코딩은 명확해야합니다 . 항상 인코딩 (예 : 'UTF-8' )을 명시 적으로 지정하여 오류가 발생하거나 일치하는 오류를 피하십시오.

  3. 정규 표현식 탈출 문제 : 복잡한 패턴을 구성 할 때는 정기적 인 구문 오류를 피하기 위해 특수 기호를 피하십시오.

실제 응용 프로그램 제안

양식 프로세서를 구축하거나 사용자 이름, 댓글 컨텐츠 등과 같은 사용자 입력을 필터링 해야하는 경우 MB_EREGI_REPLACE를 사용하여 문자가없는 문자와 비 호환성을 피하십시오. 예를 들어, 사용자 등록 양식에서 다음 방법을 사용하여 서버의 사용자 별명을 정리할 수 있습니다.

 $nickname = sanitize_input($_POST['nickname']);

이러한 방식으로 XSS 공격 및 불법 문자 주입과 같은 보안 문제는 효과적으로 피할 수 있으며 사용자 입력의 표준화도 개선 될 수 있습니다.

결론

보안 및 호환성은 사용자 입력을 처리 할 때 최우선 순위입니다. MB_EREGI_REPLACE는 입력에서 특수 문자를 지우는 강력하고 안전한 방법을 제공합니다. 이 기능은 PHP 8.0 ( MB_EREG_REPLACE 가 권장) 후에도 더 이상 사용되지 않았지만 여전히 이전 버전의 PHP를 사용하는 프로젝트에서는 여전히 안정적인 옵션입니다. 지속적인 업그레이드 유지 보수가 필요한 프로젝트의 경우 더 나은 성능과 호환성을 위해보다 현대적인 대안으로 마이그레이션하는 것이 좋습니다.