programing

PHP 문자열에서 제어 문자 제거

nasanasas 2020. 12. 10. 20:30
반응형

PHP 문자열에서 제어 문자 제거


PHP 문자열에서 STX와 같은 제어 문자를 제거하려면 어떻게해야합니까? 나는 놀았다

preg_replace("/[^a-zA-Z0-9 .\-_;!:?äÄöÖüÜß<>='\"]/","",$pString)

그러나 그것이 많이 제거되었음을 발견했습니다. 제어 문자 제거하는 방법이 있습니까?


제어 문자가 처음 32 개의 ASCII 문자\x7F (캐리지 리턴 등 포함)를 의미하는 경우 다음과 같이 작동합니다.

preg_replace('/[\x00-\x1F\x7F]/', '', $input);

(작은 따옴표에 유의하십시오. 큰 따옴표를 사용 \x00하면 어떻게 든 구문 분석 오류 발생합니다.)

줄 바꿈 및 캐리지 리턴 (종종 \r\n)은 다음과 같이 제거되지 않도록 저장할 수 있습니다.

preg_replace('/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F]/', '', $input);

코드가하는 일 더 잘 전달 한다는 점에서 Bobby의 대답 이 더 낫다고 생각합니다 .[:cntrl:][\x00-\x1F\x7F]

경고 : ereg_replace PHP> = 5.3.0에서는 더 이상 사용되지 않으며 PHP> = 7.0.0!에서는 제거되었습니다 . preg_replace대신 다음을 사용하십시오 ereg_replace.

preg_replace('/[[:cntrl:]]/', '', $input);

유니 코드 입력의 경우 입력 텍스트에서 모든 제어 문자, 할당되지 않음, 개인 사용, 서식 지정 및 서로 게이트 코드 포인트 (탭, 새 줄과 같은 공백 문자가 아님)를 제거합니다. 내 입력에서 인쇄 할 수없는 모든 문자를 제거하는 데 사용합니다.

<?php
$clean = preg_replace('/[^\PC\s]/u', '', $input);

자세한 \p{C}내용은 http://www.regular-expressions.info/unicode.html#category참조하십시오 .


PHP는 POSIX 클래스를 지원하므로 [:cntrl:]멋진 캐릭터 마법 대신 사용할 수 있습니다 .

ereg_replace("[:cntrl:]", "", $pString);

편집하다:

5.3에서는 추가 대괄호 쌍이 필요할 수 있습니다.

ereg_replace("[[:cntrl:]]", "", $pString);

제어 문자를 유지하면서 JSON과 호환되도록하려면 다음을 수행해야했습니다.

$str = preg_replace(
    array(
        '/\x00/', '/\x01/', '/\x02/', '/\x03/', '/\x04/',
        '/\x05/', '/\x06/', '/\x07/', '/\x08/', '/\x09/', '/\x0A/',
        '/\x0B/','/\x0C/','/\x0D/', '/\x0E/', '/\x0F/', '/\x10/', '/\x11/',
        '/\x12/','/\x13/','/\x14/','/\x15/', '/\x16/', '/\x17/', '/\x18/',
        '/\x19/','/\x1A/','/\x1B/','/\x1C/','/\x1D/', '/\x1E/', '/\x1F/'
    ), 
    array(
        "\u0000", "\u0001", "\u0002", "\u0003", "\u0004",
        "\u0005", "\u0006", "\u0007", "\u0008", "\u0009", "\u000A",
        "\u000B", "\u000C", "\u000D", "\u000E", "\u000F", "\u0010", "\u0011",
        "\u0012", "\u0013", "\u0014", "\u0015", "\u0016", "\u0017", "\u0018",
        "\u0019", "\u001A", "\u001B", "\u001C", "\u001D", "\u001E", "\u001F"
    ), 
    $str
);

(JSON 규칙은 "이스케이프 처리해야하는 문자를 제외한 모든 유니 코드 문자를 인용 부호 안에 넣을 수 있습니다 : 인용 부호, 역사 선 및 제어 문자 (U + 0000 ~ U + 001F)").


정규식 무료 방법

내가 익숙한 제어 문자 (32 및 127 미만) 만 재핑하는 경우 다음을 시도해보십시오.

 for($control = 0; $control < 32; $control++) {
     $pString = str_replace(chr($control), "", $pString;
 }

$pString = str_replace(chr(127), "", $pString;

루프는 DEL을 제외한 모든 것을 제거합니다.

나는 이것이 당신과 스크립트에 훨씬 덜 스트레스가 될 것이라고 생각하고 정규식과 정규식 라이브러리를 처리합니다.

정규식 무료 방법 업데이트

킥을 위해 다른 방법을 생각해 냈습니다. 이것은 제어 문자 배열을 사용하여 수행합니다.

$ctrls = range(chr(0), chr(31));
$ctrls[] = chr(127);

$clean_string = str_replace($ctrls, "", $string);

참고 URL : https://stackoverflow.com/questions/1497885/remove-control-characters-from-php-string

반응형