[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']);

이렇게하면 모든 탭, 모든 줄 바꿈 및 여러 공백, 탭 및 줄 바꿈의 모든 조합이 단일 공백으로 바뀝니다.