2009-09-07 9 views
5

에서 내가 출력 PHP에 다음 문자열을 원하는 :인코딩 문제 (UTF-8) PHP

ä ö ü ß €

따라서, 나는 수동으로 UTF8로를 인코딩했습니다

ä ö ü 님은  €

그래서 내 스크립트입니다 :

<?php 
header('content-type: text/html; charset=utf-8'); 
echo 'ä ö ü ß €'; 
?> 

처음 4 개 문자가 올바른지 (ö ü ß)하지만 불행히도 € 기호가 정확하지 :

ä ö ü ß

Here you can see it.

당신은 내가 잘못 무슨 짓을했는지 말해 줄 수 있습니까? 내 편집기 (Notepad ++)에는 Encoding (Ansi/UTF-8) 및 Format (Windows/Unix)에 대한 설정이 있습니다. 나는 그들을 바꿔야합니까?

도와 주시면 감사하겠습니다. 미리 감사드립니다!

+3

당신은 UTF-8을 지원하는 편집기를 사용합니다. 당신이 한 것은 ISO 8859-1을 사용하여 UTF-8의 코드 단어를 작성하는 것입니다. UTF-8을 사용하면'ä ö ü ß €'라고 직접 쓸 수 있습니다. – Gumbo

+1

아, 죄송합니다. ISO 8895-1 대신 Windows-1252입니다. – Gumbo

+0

UTF-8을 사용하면 파일 시작 부분에 U + FEFF가 삽입 될 수 있습니다. 그리고 PHP는 전혀 좋아하지 않습니다. – Joey

답변

8

그 마지막 문자가 파일에 없습니다 (소스를 보려고합니다). 왜 보이지 않습니다.

PHP 파일을 UTF-8로 저장하는 것이 더 나을 것 같아요. (노트 패드에서는 Option을 Format -> BOM없이 UTF-8로 인코딩 할 수 있습니다.) 그리고 PHP 파일에 실제 문자를 삽입하십시오. Notepad ++에서) Ã을 삽입하여 해킹하는 것보다. Windows 문자표는 유니 코드 문자 삽입에 유용합니다.

+0

왜 downvote? 내가 뭔가 잘못 됐어? –

+0

아니, 나는 그렇게 생각하지 않는다. 다 좋아. 메모장으로 팁을 주셔서 감사합니다 + +! – caw

5

유로 기호 (U + 20AC)는 2가 아닌 3 바이트로 UTF-8로 인코딩됩니다. 이 부분은 here입니다. 따라서 인코딩이 잘못되었습니다.

+0

고마워요, 그게 원인 인 것 같습니다. :) – caw

+1

텍스트를 처리 할 때 입력에서 유효하지 않은 바이트 시퀀스를 삭제하는 경우는 드문 일이 아닙니다. 따라서 UTF-8로 광고를하고 유효하지 않은 UTF-8을 포함 시키면 거기에있을 것으로 기대하지 마십시오. – Joey

2

항상은 생성 된 HTML이 브라우저에 사용하도록 지시 한 것과 동일한 인코딩으로 편집기를 설정해야합니다. HTML 페이지를 UTF-8로 해석하려면 텍스트 편집기를 UTF-8로 설정하십시오. PHP는 파일을 만드는 데 사용 된 편집기의 인코딩 설정을 완전히 알지 못합니다. 문자열을 바이트 스트림으로 처리합니다.

즉, 오른쪽 바이트가 파일에있는 한 모든 것이 작동합니다. 그리고 파일에 올바른 바이트가 있는지 확인하는 가장 쉬운 방법은 웹 페이지가 있어야하는 것과 동일한 인코딩으로 인코딩을 설정하는 것입니다.

그러나 최선의 방어책은 비 ASCII 문자를 코드 밖으로 완전히 나가는 것입니다. 대신 데이터베이스 또는 현지화 파일에서 가져올 수 있습니다. 즉, 인코딩을 손상시킬 염려없이 본질적으로 모든 편집기에서 코드를 수정할 수 있습니다. 당신이 출력하려면

+0

감사합니다. 앞으로이 일을하겠습니다. 실제로 코딩이 더 쉬워 질 것입니다. – caw

4

제대로 UTF8로, 스크립트가 있어야한다 :

<?php 
header('content-type: text/html; charset=utf-8'); 
echo "\xc3\xa4"."\xc3\xb6"."\xc3\xbc"."\xc3\x9f"."\xe2\x82\xac"; 
?> 

당신의 PHP 스크립트가 비 UTF8 인코딩에 저장되는 경우에도 그 방법은, 그것은 여전히 ​​작동합니다.

+0

감사합니다. 에코 라인은 정확히 무엇을합니까? – caw

+0

utf8로 인코딩 된 각각의 문자를 에코합니다 : ä ö ü ß €. 귀하의 원래 질문에 "나는 그것을 수동으로 utf8로 인코딩했습니다."라고 말했습니다. 진정으로 그렇게하려면 http://www.utf8-chartable.de/로 가서 ä을 검색하면 utf8에서 "\ xc3 \ xa4"로 표시됩니다. – velcrow

0
header('Content-Type: text/html; charset=UTF-8'); 

이것은 브라우저에 어떤 종류의 콘텐츠를 보내고 어떻게 처리해야하는지 알려줍니다. 전송중인 실제 콘텐츠의 인코딩을 설정하지 않습니다. 자신의 약속을 이행하는 것은 전적으로 귀하에게 달려 있습니다.해당 헤더를 설정했기 때문에 컨텐츠가 UTF-8로 마술처럼 변형되지는 않습니다. UTF-8로 컨텐츠를 처리하도록 브라우저에 지시했지만 라틴 -1 인코딩 된 데이터를 보내고 있다면 물론 중단됩니다.

나는이 나를

if (mb_check_encoding($value, 'UTF-8')) { 
     return $value = utf8_encode($value); 
    } 
    else { 
     return $value; 
    } 

소스 근무 What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text