2011-08-17 7 views
2

리터럴 문자열이 \r\n 인 텍스트 파일이 있습니다. 나는 이것을 실제 줄 바꿈 (\ n)으로 바꾸고 싶다.문제점 리터럴 문자열 바꾸기 r n PHP에서 줄 바꿈 사용하기

내가 정규식 /\\r\\n/ (나는 그것을 Reggy에서 테스트했습니다)과 일치해야한다는 것을 알고 있지만 PHP에서 작동하도록 할 수 없습니다.

나는 다음과 같은 변화를 시도 : 난 그냥 백 슬래시를 교체하려고하면

preg_replace("/\\\\r\\\\n/", "\n", $line);

preg_replace("/\\\\[r]\\\\[n]/", "\n", $line);

preg_replace("/[\\\\][r][\\\\][n]/", "\n", $line);

preg_replace("/[\\\\]r[\\\\]n/", "\n", $line);

, 그것은 제대로 작동합니다. r을 추가하자 마자 일치하는 것이 없습니다.

읽고있는 파일은 UTF-16으로 인코딩되어 있습니다.

은 편집 :

나는 이미 str_replace()를 사용하여 시도했다.

이제이 문제는 파일의 문자 인코딩이라고 생각합니다. 나는 다음을 시도했고 작동했다 :

$testString = "\\r\\n"; 
echo preg_replace("/\\\\r\\\\n/", "\n", $testString); 

그러나 내 파일에서 읽는 라인에서는 작동하지 않는다. 자신을 저장

답변

2

UTF-16이 문제입니다. 그냥 원시와 바이트를 작업하는 경우, 당신은 대체의 전체 시퀀스를 사용할 수 있습니다

$out = str_replace("\x00\x5c\x00\x72\x00\x5c\x00\x6e", "\x00\x0a", $in); 

이 비 제로 후에 와서 빅 엔디안 UTF-16, 다른 스왑 0 바이트로 가정

$out = str_replace("\x5c\x00\x72\x00\x5c\x00\x6e\x00", "\x0a\x00", $in); 

그래도 작동하지 않으면 입력 파일의 바이트 덤프를 게시하여 실제로 포함 된 내용을 볼 수 있도록하십시오.

+0

완벽하게 작동했습니다. 감사! 또한, UTF-16의 바이트 값을 어디에서 얻을 수 있는지 말해 줄 수 있습니까? 이전에 검색 할 때 찾지 못했습니다. – Katfish

+1

서로 게이트 쌍을 무시하면 UTF-16은'U + abcd'를'\ xab \ xcd'의 2 바이트로 인코딩합니다. 코드는 백 슬래시 (x5c), 'r'(x72) 및 'n'(x6e)의 ASCII 바이트입니다. 0x0a는 당신이 그들을 대체하고 싶은 개행 문자입니다. – Cal

5

정규식을 알아내는 대신 str_replace() 시도의 노력 :

str_replace('\r\n', "\n", $string); 
+0

나는 원래의 질문에서 그 중 하나가 작동하지 않는다고 언급 했어야합니다. 나는 그것을 지금 추가 할 것이다. – Katfish

+1

정규식을 사용하지 않는 경우 +1입니다. –

+3

@Katfish 이중 대신 작은 따옴표를 사용하십시오. 'str_replace ('\ r \ n', "\ n", $ string)' – Wiseguy

3

를 직접 저장을 정규식을 파악하는 노력을하고 따옴표 탈출 : 무엇을 위해

$fixed = str_replace('\r\n', "\n", $line); 

그것은 가치가있다, preg_replace("/\\\\r\\\\n/", "\n", $line);는 잘되어야한다. 데모로 :

var_dump(preg_replace("/\\\\r\\\\n/", "NL", 'Cake is yummy\r\n\r\n')); 

을 제공합니다 : string(17) "Cake is yummyNLNL"

또한 괜찮 : '/\\\r\\\n/''/\\\\r\\\\n/'

중요 - 위에서 작동하지 않을 경우, 당신도 \r\n 리터럴 확실하다 무엇인지 일치하려고합니까? ...

+1

LOL : D 정확히 동일한 시작 : D +1 그 – NikiC

+0

그것은 정확히 내가 뭘 하려는지,하지만 난 이제 r과 n이 PHP가 사용하는 r과 n이 같지 않을 수도 있습니다. 내 파일은 UTF-16을 사용합니다. – Katfish

1
$result = preg_replace('/\\\\r\\\\n/i', '\n', $subject);