PHP에서 문자열 처리는 개발에서 매우 일반적인 요구 사항입니다. 때때로, 우리는 보이지 않는 신생, 탭 문자 등과 같은 문자열에서 제어 문자 를 식별하고 처리해야합니다.
이 기사는 CTYPE_CNTRL 기능을 사용하여 문자열에서 제어 문자를 찾아 이러한 특수 문자를 더 잘 처리 할 수 있도록 몇 가지 효과적인 대체 방법을 설명하는 방법을 소개합니다.
제어 문자는 0에서 31 및 127 사이의 인코딩 범위를 가진 인쇄 할 수없는 문자입니다. 공통 제품에는 라인 브레이크 \ n (ASCII 10), 캐리지 리턴 \ r (ASCII 13), 탭 문자 \ t (ASCII 9) 등이 포함됩니다. 일반적으로 텍스트로 표시되지 않지만 스트링의 처리 및 표시에 영향을 줄 수 있습니다.
CTYPE_CNTRL은 문자열의 각 문자가 제어 문자인지 확인하는 데 사용됩니다. 사용법은 다음과 같습니다.
bool ctype_cntrl ( string $text )
문자열의 모든 문자가 제어 문자 인 경우 true 를 반환하십시오.
이 기능은 문자열의 각 문자에 대한 전체 판단입니다. 문자열에 제어되지 않은 문자가 포함 된 경우 결과는 False 입니다.
따라서 문자열에 제어 문자가 있는지 확인하려면 문자 별 문자 별 탐지가 필요합니다.
문자열의 각 문자를 반복하고 CTYPE_CNTRL을 사용하여 판단하고 제어 문자를 발견 한 후 교체하십시오.
샘플 코드 :
<?php
function replaceControlChars($str, $replacement = '') {
$result = '';
$length = strlen($str);
for ($i = 0; $i < $length; $i++) {
$char = $str[$i];
if (ctype_cntrl($char)) {
$result .= $replacement; // 지정된 문자로 교체하십시오,기본적으로 삭제하십시오
} else {
$result .= $char;
}
}
return $result;
}
$input = "Hello\nWorld\t!";
$output = replaceControlChars($input, ' ');
echo $output; // 산출:Hello World !
?>
제어 문자에 해당하는 ASCII 범위는 [\ x00- \ x1f \ x7f] 이며, 이는 일반 매칭으로 대체 될 수 있습니다.
예:
<?php
$input = "Line1\r\nLine2\tEnd";
$output = preg_replace('/[\x00-\x1F\x7F]/', '', $input);
echo $output; // 산출:Line1Line2End
?>
이 접근법은 일반적으로 더 효율적이며 배치 교체에 적합합니다.
문자열에 먼저 제어 문자가 포함되어 있는지 확인한 다음 교체할지 여부를 결정 해야하는 경우 먼저 Loop 및 CType_cntrl을 사용하여 판단한 다음 정기적으로 교체 할 수 있습니다.
<?php
function hasControlChars($str) {
$length = strlen($str);
for ($i = 0; $i < $length; $i++) {
if (ctype_cntrl($str[$i])) {
return true;
}
}
return false;
}
$input = "Test\nString";
if (hasControlChars($input)) {
$cleaned = preg_replace('/[\x00-\x1F\x7F]/', '', $input);
echo $cleaned;
} else {
echo $input;
}
?>
ctype_cntrl은 단일 문자가 제어 문자인지를 결정하는 데 적합합니다.
문자열에 제어 문자가 포함되어 있는지 여부를 찾을 때는 문자 별 별 특성을 루프해야합니다.
제어 문자를 대체 할 때는 일반 표현식을 사용하여 제어 문자 범위와 일치하는 것이 더 간결하고 효율적입니다.
이 둘을 결합하면 첫 번째 판단의 논리를 실현 한 다음 대체 할 수 있습니다.
위의 내용이 CType_cntrl 기능을 더 잘 이해하고 사용하여 문자열에서 제어 문자의 검색 및 교체를 실현하는 데 도움이되기를 바랍니다.
<?php
// 사이클 감지 및 교체 예
function replaceControlChars($str, $replacement = '') {
$result = '';
$length = strlen($str);
for ($i = 0; $i < $length; $i++) {
$char = $str[$i];
if (ctype_cntrl($char)) {
$result .= $replacement;
} else {
$result .= $char;
}
}
return $result;
}
$input = "Hello\nWorld\t!";
$output = replaceControlChars($input, ' ');
echo $output; // Hello World !
?>
<?php
// 정규 표현식 교체 예
$input = "Line1\r\nLine2\tEnd";
$output = preg_replace('/[\x00-\x1F\x7F]/', '', $input);
echo $output; // Line1Line2End
?>
<?php
// 먼저 감지하고 예제를 교체하십시오
function hasControlChars($str) {
$length = strlen($str);
for ($i = 0; $i < $length; $i++) {
if (ctype_cntrl($str[$i])) {
return true;
}
}
return false;
}
$input = "Test\nString";
if (hasControlChars($input)) {
$cleaned = preg_replace('/[\x00-\x1F\x7F]/', '', $input);
echo $cleaned;
} else {
echo $input;
}
?>