2010-05-27 3 views
1

SHIFT_JIS로 인코딩 된 문자를 받아들이고 이러한 결과를 전자 메일을 통해받는 사람에게 보내야하는 양식을 작성 중입니다. 정말 나를 놀라게하지 않는 (PHP에서 SHIFT_JIS 텍스트 사용

$NameJp = $_POST['NameJp']; 
$contents = <<<TEST 

Name: $NameJp 

... 
TEST 

을하지만 그 일을 나타나지 않습니다 : 나는 단순히 $ _POST 변수의 결과를 캡처 시도하고 다음과 같은 텍스트 블록에 삽입하기). 이것은 PHP에서 비 ASCII 문자를 다루는 첫 번째 시도이며 사람들이 몇 가지 제안을하기를 희망합니다. 아마도 텍스트를 인코딩하는 간단한 함수가 누락되었습니다.

또한 발생할 수있는 다른 잠재적 인 함정이 있습니까?

감사합니다.

답변

3

또한 발생할 수있는 다른 잠재적 인 함정이 있습니까?

예. :)

SHIFT_JIS에서 텍스트를받는 것이 좋습니다.하지만 그 후에도 SHIFT_JIS와 같은 방식으로 처리하고이 텍스트가 SHIFT_JIS에 있음을 다른 사람들에게 알려야합니다. 즉, 이메일에 삽입하는 경우이 이메일에 SHIFT_JIS에 텍스트가 포함되어 있음을 알리는 적절한 이메일 헤더를 설정해야합니다. 웹 페이지 또는 디버그에 표시해야하는 경우 브라우저 또는 디버깅 환경에서 텍스트를 SHIFT_JIS로 처리해야합니다. 다른 텍스트와 혼합하면 동일한 인코딩으로되어 있는지 확인해야합니다.

정직하게 말하면, SHIFT_JIS는 노후화되어 끔찍한 작업을합니다. 가능한 경우 UTF-8을 사용해야합니다. 절대적으로 SHIFT_JIS를 받아 들여서 많은 작업을해야한다면, 내부적으로 UTF-8로 변환하고 시간이 올 때 필요한 출력 인코딩으로 변환 할 수 있습니다. 그렇게하려면 iconv을 사용할 수 있습니다.

전자 메일 헤더는 ASCII 문자 이외의 문자를 포함 할 수 없다는 점에서 특수한 BTW입니다. 전자 메일의 제목은 머리글의 일부입니다. 비 ASCII 문자를 제목 줄로 보내려면 mb_encode_mimeheader을 사용하여 MIME 인코딩해야합니다.

또한 참조 용으로 : The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

+0

의견을 보내 주셔서 감사합니다. UTF-8을 사용하도록 양식을 변환 할 수있는 것으로 보입니다. UTF-8은 더 표준적이고 더 잘 지원되는 것처럼 보입니다. –

+0

@Joe SHIFT_JIS는 문자의 특정 하위 집합으로 제한되지만 UTF-8은 (사실상) 모든 문자를 나타낼 수 있습니다. SHIFT_JIS (또는 ASCII 또는 제한된 문자 세트)로 작업 할 때는 "유효하지 않은"문자를 인코딩하지 않도록 세심한주의가 필요합니다. 이런 이유로 대부분의 툴은 기본적으로 유니 코드를 선호합니다. 즉, 더 매끄럽게 타면서 개발할 수 있지만 UTF-8을 계속 사용해야합니다. 그 이외의 SHIFT_JIS도 잘 지원되어야합니다. – deceze

+1

방금 ​​문제를 해결할 수있었습니다. 유니 코드 문자를 양식에 제출하는 방법에 대한 자세한 내용을 조사한 후에 양식의 'accept-charset'필드를 발견했습니다. 일단 모든 것이 예상대로 작동하기 시작했다. –