문제

나는 비슷한 아이디어로 Stack Overflow에서 다른 질문을 살펴 보았지만 내가하려는 것과 밀접한 관련이없는 것 같습니다.

단순 해 보이지만 나는 피클에 있습니다. 여러 번의 라인 브레이크를 교체하려고합니다 (\n) 라인이 한 줄만 보이면 사람들은 한 번에 한 번 이상의 라인 브레이크를 제출할 수 없습니다. 내가 시도한 것은 다음과 같습니다.

$text = "Foo\n\n\nbar!\n\nfoobar!";
$text = preg_replace("#\n+#", "\n", $text);
echo $text;

예상 반환 된 진술은 다음과 같습니다.

Foo\nbar!\nfoobar!

하지만 시가는 없어! 나는 몇 가지를 시도했지만 아무도 작동하지 않는 것 같았습니다.

내가 뭘 잘못하고 있죠?

감사!

도움이 되었습니까?

해결책 3

솔루션에만 관심이 있으시면 마지막 줄로 건너 뜁니다.

여기에 무슨 일이 일어 났는지 여기에 있습니다. 나는 가졌다 div 특정 정보가 포함 된 HTML의 태그. 사용자가 버튼을 누르면 JS 코드가 실행되는 실행됩니다. div an input TextBox, 해당 TextBox의 값을 원래 DIV의 HTML로 설정하면서 모든 발생을 대체합니다. <br> ~와 함께 \n 실제 라인 브레이크를 만들려면. 그런 다음 양식은 Ajax를 통해 서버에 제출되었습니다.

PHP에서 라인 브레이크를 교체하려고 할 때, 위의 제안 중 어느 것도 "실제"라인 브레이크 캐릭터가 아니기 때문에 단순한 이유 때문에 도움이되지 않았습니다. 서버에 제출 된 것은 문자 그대로였습니다 \n. 당신은 백 슬래시를 탈출한다고 생각할 것입니다 \n, Ghostdog74가 제안한대로 문제를 해결할 수는 있지만 그렇지 않았습니다. 나는 몇 가지 다른 방법을 피하려고 시도했지만 아무것도 도움이되지 않는 것 같았습니다.

나는 오래된 동정인 자료를 언급하고 다음을 발견했습니다.

많은 풍미가 또한 q ... e 탈출 시퀀스를 지원합니다. q와 e 사이의 모든 문자는 문자 문자로 해석됩니다. 예 : q* d+* e는 문자 그대로의 텍스트와 일치합니다. d+. e는 Regex의 끝에서 생략 될 수 있습니다 ...이 구문은 Jgsoft Engine, Perl, Pcre ... 원천

그 후, 여기 내 문제를 해결 한 코드가 있습니다.

$text = preg_replace('#[\Q\n\E]+#', "\n", $text);

모든 도움에 감사드립니다! 모두를위한 +1 :)

다른 팁

또한 세 가지 종류의 라인 브레이크를 모두 확인할 수도 있습니다.

$text = "Foo\n\r\n\n\rbar!\n\nfoobar!";
$text = preg_replace('#(\r\n|\r|\n)+#m', "\n", $text);
echo $text;
$text = "Foo\n\n\nbar!\n\nfoobar!";
$s = split("\n+",$text);
print_r( implode("\n",$s)); #this will join the string with newline
print_r( implode("\\n",$s)); # this will have literal \n in your string 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top