문자열에서 줄 바꿈 (문자 없음)을 제거하는 방법은 무엇입니까?


146

이것은 속임수처럼 보이지만 확실하지는 않습니다. 웹에서 나머지 부분뿐만 아니라 SO를 검색하여 내 문제에 대한 답변을 찾았으며 동일한 불충분 한 "해결책"을 반복해서 찾았습니다. 어쨌든, 여기에 간다 :

텍스트 영역의 사용자 입력을 MySQL 데이터베이스 (WordPress 환경 내)에 저장하고 있지만이 문제와 관련이 없습니다. 나중에 DB에서 검색하여 사이트 백엔드의 관리자에게 표시됩니다. 사용자가 줄 바꿈이있는 텍스트를 제출할 때 문제가 발생합니다 (예 : Enter 키를 누르십시오).

샘플 문자열은 다음과 같습니다.

Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!

Greetings,
Bill

문자열에는 줄 끝 문자 ( "\ n", "\ r"등)가 없습니다.

nl2br()HTML 출력을 생성하는 데 사용 하고 있지만 충분하지 않습니다. 결과는 다음과 같습니다.

Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br />
<br />
Greetings,<br />
Bill

내가 이해하는 한, nl2br()태그를 삽입하고 처음에 줄 바꿈을 대체하지 않기 때문에 예상되는 결과는 무엇입니까?

그러나 필요한 형식은 다음과 같습니다.

Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br /><br />Greetings,<br />Bill

문자열에 "\ n"과 같은 EOL 문자가 포함되어 있으면 문자열을 사용하여 수행 str_replace()하거나 preg_replace()수행 할 수 있지만 문자가없는 경우 해당 기능 중 하나를 공급할 바늘이 없습니다. 처음에.

DB의 관련 필드에 수동으로 액세스하고 모든 줄 바꿈에 대해 백 스페이스를 누르고 나중에 문자열 작업으로 수행하려는 작업을 수행 할 수 있습니다. 따라서 위의 형식이 필요하다는 것을 알고 있습니다.


문자열이 첫 번째 예제처럼 보이면 어떻게 줄 바꿈 문자가 없다고 말할 수 있습니까? "감사합니다!"
어니스트 프리드먼 힐

Fair enuff @ ErnestFriedman-Hill, 당신은 분명히 옳습니다. "뭔가"가 있습니다.
Johannes Pille

또한 줄 바꿈 문자없이 줄 바꿈이 가능한 방법을 알 수 없습니다. 16 진 편집기를 사용하여 문자열을 검사 할 수 있습니까? 새 줄의 문자를 찾게 될 것입니다 ...
nettle

답변:


376

모든 줄 바꿈과 캐리지 리턴을 제거하는 preg으로 대체 할 수 있어야합니다. 코드는 다음과 같습니다

preg_replace( "/\r|\n/", "", $yourString );

\n문자가 나타나지 않더라도 캐리지 리턴을 받으면 보이지 않는 문자가 있습니다. preg replace는 그것들을 잡고 수정해야합니다.


믿을 수 없는. 나는 당신의 라인과 @bsdnoobz 답변에 따라 모든 것을 시도하기로 맹세 할 수 있었으며, 둘 다 일을합니다. 글쎄, 내가 가지고있는 정신적 인 블록이 무엇이든, 둘 다 나에게 많은 시간을 절약했다. 상당히 까다로운 질문으로 판명되었습니다. 고마워요!
Johannes Pille

3
이것은 모든 줄 바꿈, 즉 Windows 시스템에서 작성된 줄 바꿈과 일치하지는 않습니다. 이를 잡으려면 다음 RegEx를 대신 사용할 수 있습니다/\r|\n|\r\n/
Toastrackenigma

6
\ R (모든 줄 끝 시퀀스를 나타냄) 사용 stackoverflow.com/a/16274784/1491212
Armel Larcier

435

Ben의 솔루션 은 수용 가능하지만 str_replace ()preg_replace () 보다 훨씬 빠릅니다.

$buffer = str_replace(array("\r", "\n"), '', $buffer);

적은 CPU 전력을 사용하여 세계 이산화탄소 배출량을 줄입니다.


5
이 답변이 더 많은 신뢰를 얻지 못한다고 믿을 수 없습니다. 100이 넘는 preg_replace이다 (에 엄지 손가락)
pimbrouwers

62
중요 : 캐리지 리턴 및 개행 코드 주위에 이중 견적을 사용하십시오. 작은 따옴표를 사용하면 올바르게 처리되지 않습니다!
bwright

47
Thumbs Up-> "더 적은 CPU 전력을 사용하면 세계 이산화탄소 배출량이 줄어 듭니다."
Jan

3
@Joeri : 마지막 두 개는 처음 두 개에서 처리되므로 호출되지 않습니다. 중복 코드입니다.
nightfox89

4
@Joeri str_replace를 고려하면 모든 발생이 제거 됩니다. \ r 및 \ n 모두 제거되지 않습니까?
Bram Vanroy

16
$str = "
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br />
<br />
Greetings,<br />
Bill";

echo str_replace(array("\n", "\r"), '', $str);  // echo $str in a single line

11

nl2br()줄 바꿈을 전혀 제거하지 않기 때문 입니다.

반환와 문자열 <br />또는 <br> 이전에 삽입 된 모든 줄 바꿈 ( \r\n, \n\r, \n\r).

str_replace대신 사용하십시오 :

$string = str_replace(array("\r\n", "\r", "\n"), "<br />", $string);

7

당신은 또한 PHP 트림을 사용할 수 있습니다

이 함수는 str의 시작과 끝에서 공백이 제거 된 문자열을 반환합니다. 두 번째 매개 변수가 없으면 trim ()은 다음 문자를 제거합니다.

  • ""(ASCII 32 (0x20)), 일반 공간.
  • "\ t"(ASCII 9 (0x09)), 탭.
  • "\ n"(ASCII 10 (0x0A)), 새 줄 (줄 바꿈).
  • "\ r"(ASCII 13 (0x0D)), 캐리지 리턴
  • "\ 0"(ASCII 0 (0x00)), NUL 바이트
  • 세로 탭 "\ x0B"(ASCII 11 (0x0B))

3
이것은 문자열의 시작과 끝에서만 줄 바꿈을 목표로합니다. 문자열 중간의 줄 바꿈은 그대로 유지됩니다.
mickmackusa

6

Windows에서도 올바르게 작동하려면 사용하는 것이 좋습니다.

$buffer = str_replace(array("\r\n", "\r", "\n"), "", $buffer);

"\r\n"-Windows, "\r"-Mac 및 "\n"Linux-


2
친구 미안하지만, 12 년에 다시 한 번 물어 봤지만, 이것이 중복된다는 것을 절대 확실하게 말할 수 있습니다. 자신에게 다음과 같은 질문 : 모든 경우 \r와는 \n문자열에서 제거되어, 그 이유는 서로 직접 수행하는 사람의 경우되지 않을 것?
Johannes Pille

정말,이 명백한 것은 내 마음에 오지 않았다 ... 감사 :) 방금 문제가 있다는 것을 깨달았지만 다른 방법 \r\n으로 Windows에서 사용 했고 Linux에서는 작동하지 않았습니다.
Ajjaah

주소는 한 줄의 텍스트 그래서 대체 있도록 글쎄, 난, 쉼표로 줄 바꿈을 대체하기 위해이 기능을 사용하고 \r\nFIRST 도움이 될 각 부분에 대한 두 가지 이상의 쉼표 오히려 그 수단으로, 만약 그 줄 바꿈
마틴

@Martin 네, 맞습니다. 방금 똑같이 깨달았으므로 먼저 교체 \r\n한 다음 교체 \r하고 \n, 내 답변을 편집했습니다.
Ajjaah

당신은 모든 제거하기 위해가는 경우는, 여전히 중복 \r\r제거 할 필요가 없습니다 \r\n, 당신은 사용자 수 str_replace(array("\r","\n"), "", $buffer);와 동일한 결과를 얻을 수 있습니다.
Stramin

6

str_replace (PHP_EOL, null, $ str);


1
질문에 대한 답변이 될 수도 있습니다. 답변에 대해 조금 설명해 보시기 바랍니다.
Anirudh Sharma

문자열을 읽을 때 PHP_EOL이 항상 작동하는 것은 아닙니다. 당신이 그들을 쓸 때 않습니다.
nightfox89

코드 전용 답변은 OP 및 미래 독자를 교육하는 데 거의 도움이되지 않기 때문에 StackOverflow에서 가치가 낮습니다.
mickmackusa

4

좀 더 기능적인 것 (어디서나 사용하기 쉬운) :

function strip_carriage_returns($string)
{
    return str_replace(array("\n\r", "\n", "\r"), '', $string);
}

검색 대체 매개 변수로 PHP_EOL 을 사용하는 것도 좋습니다. 명성.


1

대체 내장 : trim ()

trim  Strip whitespace (or other characters) from the beginning and end of a string
Description 
trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] ) : string

This function returns a string with whitespace stripped from the beginning and end of str.
Without the second parameter, trim() will strip these characters:

    " " (ASCII 32 (0x20)), an ordinary space.
    "\t" (ASCII 9 (0x09)), a tab.
    "\n" (ASCII 10 (0x0A)), a new line (line feed).
    "\r" (ASCII 13 (0x0D)), a carriage return.
    "\0" (ASCII 0 (0x00)), the NUL-byte.
    "\x0B" (ASCII 11 (0x0B)), a vertical tab.

다른 종류의 텍스트 파일에서 줄 바꿈을 제거하지만 HTML을 처리하지는 않습니다.


0

이 작업을 수행하기 위해 3 줄을 사용하므로 $ s 를 "재료"로 고려 하십시오.

$s=str_replace(chr(10),'',$s);
$s=str_replace(chr(13),'',$s);
$s=str_replace("\r\n"),'',$s);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.