2012-05-26 9 views
7

Próbuję echo daty z strftime, ale dostaję złe kodowanie na znaki tylko utf-8. (w skrócie znaki akcentowane)Złe kodowanie podczas korzystania z strftime w języku hiszpańskim?

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

Czy jest jakiś problem w tej części kodu? Wszystko jest zakodowane w utf-8 i echo znaku "á" nad nim poprawnie wyświetla postać.

+0

jakie błędy są coraz biegnę swój kod w codepad i nic nie znalazłem nieodpowiednie, daj mi znać WHR u obliczu problemu http://codepad.org/YWGGJ1tW – swapnesh

+0

Jak widzisz wynik? W wyszukiwarce? Jesteś pewien, że problem leży w kodzie, a nie w sposobie, w jaki widzisz dane wyjściowe? Nie używaj też strtotime - jego bardzo złej praktyki, jako czarnej skrzynki, jeśli data, którą dostarczysz to 06/07/11 - jaki byłby wynik (który to jest rok, miesiąc, data)? – ddinchev

+0

Dostaję czarny diament z wewnątrz pytającym znakiem. Nie mogę powiedzieć na pewno, ale nie sądzę, że problem jest taki, jaki widzę, ponieważ echo "echo" á ".strftime ("% A ", strtotime ($ row ['Date'])); 'pokazuje poprawnie, ale nie drukuje sábado poprawnie. – lisovaccaro

Odpowiedz

17

spróbuj dodać utf8_encode()

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

może:

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

jestem trochę późno, ale Googling wokół znalazłem ten post. Odpowiedzi nie były odpowiednie w moim przypadku. Występuje ten sam problem co OP, ale moim ustawieniem narodowym jest fr_FR i wszystko działa poprawnie na moim komputerze, ale nie na serwerze dev.

Jeśli dodaję iconv (jak większość ludzi sugeruje, kiedy Google to dotyczy), działa na serwerze dev, ale nie na moim komputerze, więc potrzebowałem "kuloodpornego" rozwiązania, które działałoby tak samo wszędzie (jak tam jest także serwerem produkcyjnym).

Tak, problem jest tutaj z , ta funkcja zmienia ustawienia narodowe w bieżącym wykonaniu, ale każde ustawienie narodowe jest powiązane z zestawem znaków, a jeśli żadne nie jest określone, wraca do domyślnego systemu (I Myślę, że w moim przypadku było to cofnięcie się do ISO-8859-1 przy użyciu ustawienia lokalnego fr_FR. Możesz wyświetlić wszystkie dostępne ustawienia lokalne na twoim komputerze/serwerze za pomocą polecenia locale -a. Najprawdopodobniej zobaczysz żądane ustawienia narodowe z ".UTF-8" (w moim przypadku "fr_FR.UTF-8"), tak to musisz ustawić: setlocale('fr_FR.UTF-8');

0

Dla tych, którzy nie mają iconv można użyć mb funkcjonować, aby przekształcić stftime zakodowany ciąg znaków UTF-8

echo mb_convert_encoding(strftime("%A, %d de %B",strtotime($row['Date'])), 'UTF-8', mb_internal_encoding()); 
Powiązane problemy