데이터베이스 쿼리에서 문자열을받은 다음 CSV 파일에 넣기 전에 모든 HTML 태그, 캐리지 리턴 및 줄 바꿈을 제거합니다. 유일한 것은 , 문자열 사이 에서 여분의 공백 을 제거하는 방법을 찾을 수 없다는 것입니다 .
내부 공백 문자를 제거하는 가장 좋은 방법은 무엇입니까?
데이터베이스 쿼리에서 문자열을받은 다음 CSV 파일에 넣기 전에 모든 HTML 태그, 캐리지 리턴 및 줄 바꿈을 제거합니다. 유일한 것은 , 문자열 사이 에서 여분의 공백 을 제거하는 방법을 찾을 수 없다는 것입니다 .
내부 공백 문자를 제거하는 가장 좋은 방법은 무엇입니까?
답변:
정확히 원하는 것이 확실하지 않지만 다음 두 가지 상황이 있습니다.
방금 초과를 처리하는 경우 whitespace사용할 수있는 문자열의 시작이나 끝에서 trim()
, ltrim()
또는 rtrim()
제거 할 수 있습니다.
문자열 내에서 여분의 공백을 처리 하는 경우 단일 공백 preg_replace
을 여러 개 고려하십시오 .whitespaces " "*
whitespace " "
예:
$foo = preg_replace('/\s+/', ' ', $foo);
$foo = preg_replace( '/\s+/', ' ', $foo );
을 죽일 것입니다nl2br()
$str = str_replace(' ','',$str);
또는 밑줄로 바꾸십시오. & nbsp; 등
Hi Earth
4 개 공간 사이가 될 것이다 HiEarth
. 이것은 질문과 관련된 내 문제를 해결하지 못합니다.
다른 예제 중 어느 것도 나를 위해 일하지 않았 으므로이 예제를 사용했습니다.
trim(preg_replace('/[\t\n\r\s]+/', ' ', $text_to_clean_up))
이것은 모든 탭, 줄 바꿈, 이중 공백 등을 단순한 1 공백으로 대체합니다.
\s+
. 2014 년에 다시 돌아 왔지만 변경되었을 수도 있지만 지난 3 년 동안 PHP를 만지지 않았으며 의견을 제시 할 수는 없지만 해결책 인 동안 현재 답변을 남기고 여전히 일부 경우에있을 수 있습니다.
사용자 입력 (또는 다른 신뢰할 수없는 소스)에서 페이로드를 얻는 경우 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에서 공백을 찾은 다음 그 뒤의 모든 것을 제거합니다.
최근에 정규 표현식없이 문자열에서 여분의 공백을 제거하는 간단한 함수를 작성했습니다 implode(' ', array_filter(explode(' ', $str)))
.