source

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

nicesource 2023. 1. 8. 14:35
반응형

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

데이터베이스 쿼리에서 문자열을 받은 후 CSV 파일에 넣기 전에 HTML 태그, 캐리지 리턴 및 줄바꿈을 모두 삭제합니다.다만, 끈 사이의 여분의 여백을 제거할 방법을 찾을 수 없습니다.

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

정확히 무엇을 원하는지는 모르겠지만 다음 두 가지 상황이 있습니다.

  1. 문자열의 처음 또는 끝에 과잉이 있는 경우 사용할 수 있습니다.trim(),ltrim()또는rtrim()제거할 수 있습니다.

  2. 문자열 내에서 여분의 공간을 취급하는 경우preg_replace배수의 " "*싱글로 " ".

예:

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

또는 언더스코어, nbsp; 등으로 대체합니다.

다른 어떤 예도 통하지 않았기 때문에 이 예제를 사용했습니다.

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

이렇게 하면 모든 탭, 새 줄, 이중 공백 등이 단순한 1개의 공백으로 바뀝니다.

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

위의 코드 행에서는 선행 및 후행 공백뿐만 아니라 추가 공백도 제거됩니다.

문자열 내의 여러 공백만 치환하는 경우, 예를 들어 다음과 같습니다."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()를 사용하면 사용자 입력(또는 기타 신뢰할 수 없는 소스)에서 payload를 얻을 수 있는 보안 결함이 있습니다.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)));

루프에 네이티브를 사용하거나 regex를 사용하여 이러한 작업을 수행하는 것이 좋습니다.

Sandip의 답변에 대해 자세히 설명하자면, bit.ly에서 잘못 코딩된 많은 문자열이 로그에 표시되었습니다.URL만 코드화하고 공백 뒤에 트위터 핸들이나 다른 것들을 넣으려고 했어요.이렇게 생겼어요.

? productID =26%20via%20@LFS

보통은 문제가 없지만 SQL 주입 시도가 많아 ID가 올바르지 않은 경우 404로 수정합니다.잘못된 제품을 만들기 위해 preg_replace 방법을 사용했습니다.유효한 제품에 대한 ID 문자열아이디

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

저는 URL에서 공백을 찾고 그 뒤에 있는 모든 것을 제거합니다.

에 정규 를 썼습니다.implode(' ', array_filter(explode(' ', $str))).

9. Larabel 9.7을 했습니다.Str::squish()단어 사이의 외부 공백을 포함하여 외부 공백을 제거하는 방법: https://laravel.com/docs/9.x/helpers#method-str-squish

$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);

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

반응형