Финские буквы и Excel

idencial

Одинаковый
Финские буквы и Excel

Есть скрипт на php, с помощью которого вносятся некоторые данные а базу.
Среди эти данных проскакивают финские буквы (с точками всякими =)), которые попадают в базу замененными на html коды этих букв (ну типа ä)

Затем я данные из базы выдергиваю и создаю .xls файл, но в нем мне нужно чтобы были не html коды типа ä, а именно финские буквы.
Т.е тут, наверное идет речь кодах Excel для представления таких букв

Кто-нибудь сталкивался с такой задачей?
Буду признателен за совет.
 

idencial

Одинаковый
Не пойму почему, но такой код работает
PHP:
echo html_entity_decode("Привет", ENT_NOQUOTES, "win-1251");
а такой нет
PHP:
echo html_entity_decode("Tämä on testi", ENT_NOQUOTES, "ISO8859-15");
 

idencial

Одинаковый
Так выводит у меня тоже (только в браузере) =)
Только в коде остается Tämä on testi

И в Excel так и остается Tämä on testi
 

lucas

Guest
Ничего не понял.

Что из этого не получается:
1. Извлечь данные из БД.
2. Перекодировать entities -> буквы.
3. Записать в xls-файл.
 

idencial

Одинаковый
Я вынимаю из БД

там в строчке есть кусок
PHP:
Tämä on testi
делаю
PHP:
html_entity_decode("Tämä on testi", ENT_NOQUOTES, "ISO8859-15")
и пишу в Excel

в Excel все равно выводит
PHP:
Tämä on testi
если же делать
PHP:
echo html_entity_decode("Tämä on testi", ENT_NOQUOTES, "ISO8859-15")
ТО в браузере конечно выведет Tämä on testi, но если глянуть в код, то там остается
PHP:
Tämä on testi
 

Frol

Новичок
я буквы ä и ö храню без всякого перевода, как есть.
базу под кодировку не подгоняю.

конечно, в Excel не пробывал их пихать.
 

idencial

Одинаковый
Frol
Так я специально тоже ничего не перевожу
Они вводят по-фински, в базу летит
PHP:
"Tämä on testi"
сайт для финов, сервак в России

Самое обидное, что html коды кавычек html_entity_decode без проблем преобразует и в Excel они отображаются нормально

Коды русских букы
PHP:
html_entity_decode("Привет", ENT_NOQUOTES, "win-1251");
он тоже преобразует нормально, а вот финские не хочет
 

idencial

Одинаковый
а финском кроме ä и ö ведь еще какие-то есть
Это значит надо достать коды всех "особых" букв
+
может я туплю, но не знаю как я впишу что-то типа
str_replace("
PHP:
ä
", "ä", $str);
в редактор, т.к то ли я его как-то криво настраиваю, но у меня "ä" не вводится только "a"

P.S. редактор EditPlus
 

Frol

Новичок
также в финском алфавите есть еще буква å (шведская о), но используется она только в названиях.
все они: ö ä å

с редактором -- не знаю.
 

idencial

Одинаковый
А может там в мануале описка или ошибка?
Там написано, что указывая кодировку ISO8859-15 добавляются финские и французские буквы

Однако судя по результату ничего не добавляется

P.S. PHP 4.3.3 так что работать должно

-~{}~ 11.06.04 03:07:

Я пытаюсь сделать так
$var = str_replace("Ö", chr(214), $var);

И у меня происходит замена буквы Ö на букву "Д"

Сервер в России и мне кажется все эти проблемы из-за этого, т.е что-то не так с кодировкой

Нет ли у кого-нибудь мыслей как заставить работать html_entity_decode или или заменить Ö при помощи str_replace?

-~{}~ 11.06.04 03:08:

блин, строчку забыл кодом сделать

сделать пытаюсь конечно же так
PHP:
$var = str_replace("Ö", chr(214), $var);
 

Frol

Новичок
И у меня происходит замена буквы Ö на букву "Д"
нужно поставить правильную кодировку

$str = 'öäåÖÄÅ';
for ($i = 0; $i < strlen($str); $i++) {
echo $str{$i},' ',ord($str{$i}),'<br>';
}

если кодировка стоит Cyrilic -- то будет
Код:
ц 246
д 228
е 229
Ц 214
Д 196
Е 197
если же поставить Westrern European -- то будет все ок
Код:
&#246; 246
&#228; 228
&#229; 229
&#214; 214
&#196; 196
&#197; 197
 

idencial

Одинаковый
Так в браузере поставить кодировку не проблема

Проблема как выставить ее когда я достаю данные из базы, а потом делаю замену, вида
PHP:
function my_decode($var) {
   $var = html_entity_decode($var, ENT_QUOTES, "ISO8859-15");
   $var = str_replace("\r", "", $var);

   $var = str_replace("&#214;", chr(214), $var);
   $var = str_replace("&#228;", chr(228), $var);
   $var = str_replace("&#229;", chr(229), $var);
   $var = str_replace("&#246;", chr(246), $var);
   $var = str_replace("&#196;", chr(196), $var);
   $var = str_replace("&#197;", chr(197), $var);
   return $var;
}
После этого я их шлю в Excel и вижу, что произошла замена на основании Cyrilic

Т.е вопрос в том как выставить кодировку Westrern European перед заменой символов.

ЗЫ.
Самое интересное, что если сделать так
PHP:
$var = html_entity_decode($var, ENT_QUOTES, "win-1251");
то происходит замена этих символов на русские буквы, а если же сделать
PHP:
$var = html_entity_decode($var, ENT_QUOTES, "ISO8859-15");
то эти символы вообще не заменяются, хотя в мане написано, что должны
 

Frol

Новичок
После этого я их шлю в Excel и вижу, что произошла замена на основании Cyrilic
это не замена.
просто из-за неправильной кодировки при отображении или, наверное (не могу сейчас проверить), отсутствии данных букв в шрифте -- финнские символы видны как русккие.

не работал с Екселем.
там можно менять кодировку?

у меня еще не получилось одновременно отображать русский и финнский в "чистом виде", не кодируя :)
 

idencial

Одинаковый
Я не нашел где в Екселе менять кодировку, но там без проблем отображаются и русские и финские буквы.
Если скопировать букву, например, &#214; из форума и вставить в Excel, то она там отобразится
Т.е может я чего-то не догоняю, но раз при копировании финская буква отображается в Екселе, значит финские буквы видны в Excel как русские не из-за отсутствия букв в шрифте, хотя я могу ошибаться.

Самое обидное, что не смотря не на что функция html_entity_decode откровенно не корректно работает с кодировкой ISO8859-15, т.к даже не пытается заменить кодированные симвволы (при работе с win-1251, как я уже говорил, все нормально)
 

IBSN

Новичок
под рукой нет екселя, а что тебе мешает сохранить в html из эксель с этой буквой и посмотреть какую он кодировку поставит... принцип тыка...
 

idencial

Одинаковый
Так в это смысла нет
Ведь он эти буквы преобразует в html представление, которое я и так знаю.
Мне как раз нужно обратное преобразование сделать
 

Profic

just Profic (PHP5 BetaTeam)
1) Все версии Экселя начиная с 97 поддерживают Юникод, потому там внутри можно делать, что угодно
Все версии ниже не знают о том и делают все в одной кодировке.
2) Чем производится "запись в эксель"?
 
Сверху