get , когда для специальных символов используются gettext и smarty - PullRequest
3 голосов
/ 22 августа 2010

Я использую $encoding = 'utf-8'; в gettext и в моем HTML-коде я установил <meta charset="utf-8">.Я также установил utf-8 в своих .po файлах, но я все равно получаю �, когда пишу æøå!Что может быть не так?

Ответы [ 2 ]

4 голосов
/ 22 августа 2010

Давайте посмотрим, как значения, которые вы упоминаете, находятся на уровне байтов.

Я скопировал æøå из вашего вопроса и � из вашего заголовка. Причина для � заключается в том, что мне пришлось использовать консольное приложение Windows для получения заголовка вашего вопроса, и его кодовая страница была Windows 1252 (при копировании из браузера мне Unicode Character 'REPLACEMENT CHARACTER' (U+FFFD)).

В скрипте, закодированном в UTF-8, это дает:

<?php
$s = 'æøå';
$s2 = '�';

echo "s iso-8859-1 ", @reset(unpack("H*", mb_convert_encoding($s, "ISO-8859-1", "UTF-8"))), "\n";
echo "s2 win-1252  ", @reset(unpack("H*", mb_convert_encoding($s, "WINDOWS-1252", "UTF-8"))), "\n";
s iso-8859-1 e6f8e5
s2 win-1252  e6f8e5

Итак, представление байтов совпадает. Проблема в том, что когда вы пишете æøå либо:

  • Вы пишете это в ISO-8859-1 вместо UTF-8. Проверьте свой текстовый редактор.
  • Значение переводится из UTF-8 в ISO-8859-1 (маловероятно)
3 голосов
/ 27 августа 2010

Вам необходимо установить этот

bind_textdomain_codeset ($ domain, "UTF-8");

В противном случае вы получите символ *

...