IT

문자열 내에서 여분의 공백 제거

lottoking 2020. 7. 7. 07:23
반응형

문자열 내에서 여분의 공백 제거


데이터베이스 쿼리에서 문자열을받은 다음 CSV 파일에 넣기 전에 모든 HTML 태그, 캐리지 리턴 및 줄 바꿈을 제거합니다. 유일한 것은 , 문자열 사이 에서 여분의 공백 을 제거하는 방법을 찾을 수 없다는 것입니다 .

내부 공백 문자를 제거하는 가장 좋은 방법은 무엇입니까?


정확히 원하는 것이 확실하지 않지만 다음 두 가지 상황이 있습니다.

  1. 방금 초과를 처리하는 경우 whitespace사용할 수있는 문자열의 시작이나 끝에서 trim(), ltrim()또는 rtrim()제거 할 수 있습니다.

  2. 문자열 내에서 여분의 공백을 처리 하는 경우 단일 공백 preg_replace을 여러 개 고려하십시오 .whitespaces " "*whitespace " "

예:

$foo = preg_replace('/\s+/', ' ', $foo);

$str = str_replace(' ','',$str);

또는 밑줄로 바꾸십시오. & nbsp;


$str = trim(preg_replace('/\s+/',' ', $str));

위의 코드 줄은 추가 공백과 선행 및 후행 공백 을 제거 합니다.


다른 예제 중 어느 것도 나를 위해 일하지 않았 으므로이 예제를 사용했습니다.

trim(preg_replace('/[\t\n\r\s]+/', ' ', $text_to_clean_up))

이것은 모든 탭, 줄 바꿈, 이중 공백 등을 단순한 1 공백으로 대체합니다.


당신은 예를 들어, 문자열 만 여러 공백을 대체 할 경우 : "this string have lots of space . "그리고 당신은 답이 될 것으로 기대 "this string have lots of space", 당신은 다음과 같은 솔루션을 사용할 수 있습니다 :

$strng = "this string                        have lots of                        space  .   ";

$strng = trim(preg_replace('/\s+/',' ', $strng));

echo $strng;


사용자 입력 (또는 다른 신뢰할 수없는 소스)에서 페이로드를 얻는 경우 preg_replace () 사용에 대한 보안 결함이 있습니다. PHP는 eval ()로 정규 표현식을 실행합니다. 들어오는 문자열이 제대로 위생 처리되지 않으면 응용 프로그램에 코드 삽입이 발생할 위험이 있습니다.

내 자신의 응용 프로그램에서는 입력을 위생 처리하지 않고 짧은 문자열 만 처리하는 대신 약간 더 많은 프로세서 집약적 기능을 만들었지 만 아무것도 평가하지 않기 때문에 안전합니다.

function secureRip(string $str): string { /* Rips all whitespace securely. */
  $arr = str_split($str, 1);
  $retStr = '';
  foreach ($arr as $char) {
    $retStr .= trim($char);
  }
  return $retStr;
}

$str = preg_replace('/[\s]+/', ' ', $str);

당신이 사용할 수있는:

$str = trim(str_replace("  ", " ", $str));

이렇게 하면 문자열의 양쪽에서 여분의 공백제거 되고 문자열 내에서 두 공백이 하나로 변경 됩니다. 이렇게하면 연속으로 3 개 이상의 공백이 1 개로 변환되지 않습니다. 내가 제안 할 수있는 또 다른 방법은 더 안전하지만 완전히 최적이 아닌 폭발과 폭발을 사용하는 것입니다!

$str = implode(" ", array_filter(explode(" ", $str)));

내 제안은 네이티브 for 루프를 사용하거나 정규식을 사용하여 이러한 종류의 작업을 수행하는 것입니다.


Sandip의 답변을 확장하기 위해 비트에 잘못 코딩 된 문자열이 로그에 표시되었습니다. 그들은 단지 URL을 코딩하려고했지만 공백 뒤에 트위터 핸들과 다른 것들을 넣었습니다. 이렇게 생겼어요

? productID =26%20via%20@LFS

일반적으로, 그것은 문제가되지 않지만 많은 SQL 주입 시도를 받고 있으므로 유효한 ID가 아닌 것은 404로 리디렉션합니다. preg_replace 메소드를 사용하여 잘못된 productID 문자열을 유효한 productID입니다.

$productID=preg_replace('/[\s]+.*/','',$productID);

URL에서 공백을 찾은 다음 그 뒤의 모든 것을 제거합니다.


$str = "I      am a PHP   Developer";
$str_length = strlen($str);
$str_arr = str_split($str);
for ($i = 0; $i < $str_length; $i++) {
   if (isset($str_arr[$i + 1])  && $str_arr[$i] == ' ' && $str_arr[$i] == $str_arr[$i + 1]) {
       unset($str_arr[$i]);
   } 
   else {
     continue;
   }
}
echo implode("", $str_arr);

최근에 정규 표현식없이 문자열에서 여분의 공백을 제거하는 간단한 함수를 작성했습니다 implode(' ', array_filter(explode(' ', $str))).

참고 URL : https://stackoverflow.com/questions/1703320/remove-excess-whitespace-from-within-a-string

반응형