2012-05-26 5 views
7

strftime을 사용하여 날짜를 표시하려고하는데 utf-8 문자에만 잘못된 인코딩이 표시됩니다.스페인어로 strftime을 사용할 때 인코딩이 잘못 되었습니까?

setlocale(LC_TIME, 'spanish'); 
define("CHARSET", "iso-8859-1"); 
echo strftime("%A, %d de %B",strtotime($row['Date'])); 

코드의이 부분에 어떤 문제가 있습니까 (기본적으로 문자를 강조)? 모든 것은 utf-8로 인코딩되며 그 위의 'á'문자를 반향 출력하면 문자가 올바르게 표시됩니다.

+0

을 stftime에게 인코딩 된 문자열로 변환하는 기능을 사용할 수 있습니다, HTTP u는 문제에 직면 WHR 알려주세요 /codepad.org/YWGGJ1tW – swapnesh

+0

결과를 어떻게 봅니까? 브라우저 에서요? 문제가 코드에 있고 출력을 보는 방식이 아닌가? 또한, strtotime을 사용하지 마십시오. 매우 나쁜 습관을 블랙 박스로 제공하십시오. 여러분이 제공 한 날짜가 06/07/11 일 경우 결과 (1 년, 1 개월, 1 년)는 무엇입니까? – ddinchev

+0

내부에 의문 부호가있는 검은 색 다이아몬드가 나타납니다. 확실히 말할 수는 없지만, 문제가'echo "echo"echo "echo ("% A ", strtotime ($ row [ 'Date'])) 이후에보고있는 방식으로 생각하지 않는다. '는 제대로 인쇄하지만 인쇄는 제대로하지 않습니다. – lisovaccaro

답변

17

를 추가해보십시오 utf8_encode() 아마도

setlocale(LC_TIME, 'spanish'); 
define("CHARSET", "iso-8859-1"); 
echo utf8_encode(strftime("%A, %d de %B",strtotime($row['Date']))); 
2

:

echo iconv("iso-8859-1","utf-8",strftime("%A, %d %B",strtotime($row['Date']))); 
9

나는 조금 늦게 해요,하지만 주위에 인터넷 검색이 게시물을 발견했다. 그리고 내 대답은 적절하지 않았습니다. OP와 동일한 문제가 발생하지만 내 로캘이 fr_FR이고 모든 것이 내 컴퓨터에서 제대로 작동하지만 dev 서버에서는 작동하지 않습니다.

iconv를 추가하면 (대부분이 사람들이 Google에서이 문제를 제안 할 때) 개발자 컴퓨터에서는 작동하지만 내 컴퓨터에서는 작동하지 않으므로 어디서나 똑같이 작동하는 "방탄"솔루션이 필요했습니다. 프로덕션 서버이기도 함).

이 문제는 setlocale에서 발생합니다.이 함수는 현재 실행시 로케일을 변경하지만 모든 로캘은 charset과 연결되어 있으며 지정되지 않은 경우 시스템의 기본 설정으로 되돌아갑니다. 내 경우에는 fr_FR 로켈을 사용할 때 ISO-8859-1로 돌아가고 있다고 생각합니다.) locale -a 명령을 사용하여 컴퓨터/서버에서 사용 가능한 모든 로케일을 나열 할 수 있습니다. ".UTF-8"(내 경우 "fr_FR.UTF-8")을 사용하여 원하는 로케일을 보게 될 것입니다. setlocale('fr_FR.UTF-8');

0

iconv가없는 경우/: 당신이 메가가 UTF-8로, 내가 부적절 아무것도 codepad에서 코드를 실행하지 발견 당신이 점점 오류

echo mb_convert_encoding(strftime("%A, %d de %B",strtotime($row['Date'])), 'UTF-8', mb_internal_encoding()); 
관련 문제