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
'programing' 카테고리의 다른 글
JAVA_HOME이 잘못된 디렉토리로 설정되었습니다. (0) | 2020.12.10 |
---|---|
SVN 저장소를 다른 SVN 저장소로 마이그레이션하려면 어떻게합니까? (0) | 2020.12.10 |
PHP에서 동적 정적 메서드 호출? (0) | 2020.12.10 |
보이는 테이블 행 수를 계산하는 jquery 선택기? (0) | 2020.12.10 |
모델에서 언제`save`와`save!`를 사용해야합니까? (0) | 2020.12.10 |