컴퓨터 엑셀 워드 포토숍 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Previous Post PHP 예제] 유니코드(UTF-8) 한글 문자열 크기/글자 수 구하기; Unicode St...PHP 예제] 문자열 길이, 한글 글자 수 구하기 함수; CJK String Length윈도우용 PHP, mbstring 익스텐션(Extension;모듈) 설치/인식 방법자바스크립트] 이번 달이 몇 분기? 몇 사분기인지 구하기; JavaScript Quarte...Python 파이썬] 이번 달이 몇 분기? 몇 사분기인지 구하기; Quarter of th...자바스크립트] alert 상자, 여러 줄로 줄바꿈 기호, 개행문자; Javascript A...자바스크립트] 방문객 모니터 해상도 구하기/판단; JavaScript Screen Reso...Java 자바] 이번 달이 몇 분기? 몇 사분기인지 구하기; Quarter of the Y...C언어] 이번달은 몇 분기? 몇 사분기 판단 함수; Quarter of the YearPerl 펄] 이번 달은 몇 분기, 몇 사분기 구하기 함수; Quarter of the Y...

PHP 예제] 도스 줄바꿈, 유닉스 개행문자 출력; CR LF

Sunday, April 29, 2007

현재 PHP 5 에서 문자열을 출력하면, 줄바꿈에 좀 문제가 있습니다. 특히 윈도우에서 PHP 를, 일반 프로그램인 CLI로서 사용할 경우입니다.

echo / print / printf 등으로 문자열을 출력할 때 "\n" 이런 이스케이프 문자를 사용하면, 윈도우에서도 항상, 유닉스 스타일 (LF) 로 줄바꿈이 됩니다.

그러나 PHP 코드가 아닌 HTML 영역은, 운영체제에 맞게 나옵니다. 그래서, 한 파일에 두 가지 형식의 줄바꿈이 존재하게 됩니다. 브라우저에서 줄바꿈을 자동으로 알아서 처리하기에 큰 문제는 되지 않지만, 메모장 같은 원시적인 편집기로 출력 파일을 읽으면 줄바꿈이 되지 않고 이상한 문자가 찍히게 됩니다. (윈도우 메모장은 유닉스 줄바꿈을 인식하지 못함.)

그래서 출력 파일의 모든 줄바꿈을 완벽한 "도스 개행문자 (CR LF)"로 출력하려면, "\n" 이 아닌 "\r\n" 으로 줄바꿈을 해주어야 합니다. 그렇지만 이것이 불편하기도 하고 또한 리눅스에서의 호환성에도 문제가 있어서, 다른 해결법을 찾아보아도 없더군요. 업데이트: ▶▶ PHP 5] 운영체제에 맞게 개행문자 출력 상수; 자동 CRLF 줄바꿈; DOS Windows Newline


줄바꿈 문자 테스트용 소스
파일명: example.php
<html>
<head>
<title>PHP Example</title>
</head>

<body>

<?php

  echo "유닉스 개행문자(Unix)<br />\n";
  print "유닉스 개행문자(Unix)<br />\n";
  printf("유닉스 개행문자(Unix)<br />\n");

  echo "도스/윈도우 개행문자(DOS/Windows)<br />\r\n";
  print "도스/윈도우 개행문자(DOS/Windows)<br />\r\n";
  printf("도스/윈도우 개행문자(DOS/Windows)<br />\r\n");

?>

</body>
</html>


실행 결과 화면:
(옆으로 스크롤 가능)
D:\Z>php example.php
<html>
<head>
<title>PHP Example</title>
</head>

<body>

유닉스 개행문자(Unix)<br />
유닉스 개행문자(Unix)<br />
유닉스 개행문자(Unix)<br />
도스/윈도우 개행문자(DOS/Windows)<br />
도스/윈도우 개행문자(DOS/Windows)<br />
도스/윈도우 개행문자(DOS/Windows)<br />

</body>
</html>

D:\Z>php example.php > out.html
D:\Z>hexdump.pl out.html
00000000:  3C 68 74 6D 6C 3E 0D 0A  3C 68 65 61 64 3E 0D 0A  <html>..<head>..
00000010:  3C 74 69 74 6C 65 3E 50  48 50 20 45 78 61 6D 70  <title>PHP Examp
00000020:  6C 65 3C 2F 74 69 74 6C  65 3E 0D 0A 3C 2F 68 65  le</title>..</he
00000030:  61 64 3E 0D 0A 0D 0A 3C  62 6F 64 79 3E 0D 0A 0D  ad>....<body>...
00000040:  0A C0 AF B4 D0 BD BA 20  B0 B3 C7 E0 B9 AE C0 DA  ....... ........
00000050:  28 55 6E 69 78 29 3C 62  72 20 2F 3E 0A C0 AF B4  (Unix)<br />....
00000060:  D0 BD BA 20 B0 B3 C7 E0  B9 AE C0 DA 28 55 6E 69  ... ........(Uni
00000070:  78 29 3C 62 72 20 2F 3E  0A C0 AF B4 D0 BD BA 20  x)<br />.......
00000080:  B0 B3 C7 E0 B9 AE C0 DA  28 55 6E 69 78 29 3C 62  ........(Unix)<b
00000090:  72 20 2F 3E 0A B5 B5 BD  BA 2F C0 A9 B5 B5 BF EC  r />...../......
000000A0:  20 B0 B3 C7 E0 B9 AE C0  DA 28 44 4F 53 2F 57 69   ........(DOS/Wi
000000B0:  6E 64 6F 77 73 29 3C 62  72 20 2F 3E 0D 0A B5 B5  ndows)<br />....
000000C0:  BD BA 2F C0 A9 B5 B5 BF  EC 20 B0 B3 C7 E0 B9 AE  ../...... ......
000000D0:  C0 DA 28 44 4F 53 2F 57  69 6E 64 6F 77 73 29 3C  ..(DOS/Windows)<
000000E0:  62 72 20 2F 3E 0D 0A B5  B5 BD BA 2F C0 A9 B5 B5  br />....../....
000000F0:  BF EC 20 B0 B3 C7 E0 B9  AE C0 DA 28 44 4F 53 2F  .. ........(DOS/
00000100:  57 69 6E 64 6F 77 73 29  3C 62 72 20 2F 3E 0D 0A  Windows)<br />..
00000110:  0D 0A 3C 2F 62 6F 64 79  3E 0D 0A 3C 2F 68 74 6D  ..</body>..</htm
00000120:  6C 3E 0D 0A 0D 0A                                 l>....

D:\Z>


예제 소스를 윈도우 도스창에서 실행한 후, 출력을
php example.php > out.html
이렇게 out.html 파일로 저장한 다음, Perl로 만든 헥사 뷰어로 본 것입니다. (울트라에디트의 헥사 뷰어로는 줄바꿈 문자를 정확히 볼 수 없음.)

HTML 영역의 HTML 태그들은 운영체제에 맞게 "도스 줄바꿈(0D 0A = CR LF)"이고

"\n" 으로 줄바꿈한 부분은 "유닉스 줄바꿈(0A = LF)"이고

"\r\n" 으로 줄바꿈한 부분은 "도스 줄바꿈(0D 0A = CR LF)"으로 강제로 지정되어 있습니다.



▶▶ PHP 예제] 다음줄로 줄바꿈 문자 넣기, 엔터 키(Enter) 치기; Newline Char

0 Comments:

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Categories
Previous Posts
Monthly Archives
Top