문자열 내에서 여분의 공백 제거
데이터베이스 쿼리에서 문자열을받은 다음 CSV 파일에 넣기 전에 모든 HTML 태그, 캐리지 리턴 및 줄 바꿈을 제거합니다. 유일한 것은 , 문자열 사이 에서 여분의 공백 을 제거하는 방법을 찾을 수 없다는 것입니다 .
내부 공백 문자를 제거하는 가장 좋은 방법은 무엇입니까?
정확히 원하는 것이 확실하지 않지만 다음 두 가지 상황이 있습니다.
방금 초과를 처리하는 경우 whitespace사용할 수있는 문자열의 시작이나 끝에서
trim(),ltrim()또는rtrim()제거 할 수 있습니다.문자열 내에서 여분의 공백을 처리 하는 경우 단일 공백
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
'IT' 카테고리의 다른 글
| 기능이 너무 긴 경우는 언제입니까? (0) | 2020.07.07 |
|---|---|
| 안드로이드, 문자열을 날짜로 어떻게 변환합니까? (0) | 2020.07.07 |
| 왜 Lisp를 배워야합니까? (0) | 2020.07.07 |
| UIImage를 가져 와서 검은 색 테두리를 줄 수 있습니까? (0) | 2020.07.07 |
| Mac에서 Windows로 줄 바꿈 형식 변환 (0) | 2020.07.07 |