[php] 여러 공백 제거
$row['message']
MySQL 데이터베이스에서 가져오고 있으며 모든 공백을 제거해야합니다 \n
\t
.
$row['message'] = "This is a Text \n and so on \t Text text.";
다음 형식이어야합니다.
$row['message'] = 'This is a Text and so on Text text.';
나는 시도했다 :
$ro = preg_replace('/\s\s+/', ' ',$row['message']);
echo $ro;
하지만 제거하지 않습니다 \n
또는 \t
, 단지 하나의 공간. 누구든지 그 방법을 말해 줄 수 있습니까?
답변
당신이 필요합니다 :
$ro = preg_replace('/\s+/', ' ',$row['message']);
사용 \s\s+
하는 공백 (공백, 탭 또는 줄 바꿈) 뒤에 하나 이상의 공백이 있습니다. 효과적으로 두 개 이상의 공백을 단일 공백으로 바꾸는 것을 의미합니다.
원하는 것은 하나 이상의 공백을 단일 공백으로 바꾸는 것이므로 패턴을 사용 \s\s*
하거나 \s+
(권장)
답변
<?php
$str = "This is a string with
spaces, tabs and newlines present";
$stripped = preg_replace(array('/\s{2,}/', '/[\t\n]/'), ' ', $str);
echo $str;
echo "\n---\n";
echo "$stripped";
?>
이 출력
This is a string with
spaces, tabs and newlines present
---
This is a string with spaces, tabs and newlines present
답변
preg_replace('/[\s]+/mu', ' ', $var);
\s
이미 탭과 줄 바꿈이 포함되어 있으므로 위의 정규 표현식으로 충분합니다.
답변
하나의 기능으로 단순화 :
function removeWhiteSpace($text)
{
$text = preg_replace('/[\t\n\r\0\x0B]/', '', $text);
$text = preg_replace('/([\s])\1+/', ' ', $text);
$text = trim($text);
return $text;
}
Danuel O’Neal의 답변을 바탕으로합니다.
답변
$str='This is a Text \n and so on Text text.';
print preg_replace("/[[:blank:]]+/"," ",$str);
답변
여기서 문제를 복제 할 수 없습니다.
$x = "this \n \t\t \n works.";
var_dump(preg_replace('/\s\s+/', ' ', $x));
// string(11) "this works."
나는 그것이 단지 전사 오류인지 아닌지 확신 할 수 없지만, 귀하의 예에서는 작은 따옴표로 묶인 문자열을 사용하고 있습니다. \n
그리고 \t
당신은 이중 인용 문자열을 가지고있는 경우에만 새로운 라인과 탭으로 처리됩니다. 그건:
'\n\t' != "\n\t"
편집 : Codaddict가 지적했듯이 \s\s+
단일 탭 문자를 대체하지 않습니다. 그래도 사용하는 \s+
것이 효율적인 솔루션 이라고 생각하지 않으므로 대신 어떻게 해야합니까 ?
preg_replace('/(?:\s\s+|\n|\t)/', ' ', $x);
답변
preg_replace('/(\s\s+|\t|\n)/', ' ', $row['message']);
이렇게하면 모든 탭, 모든 줄 바꿈 및 여러 공백, 탭 및 줄 바꿈의 모든 조합이 단일 공백으로 바뀝니다.