php to rtf, é становится Ã © - PullRequest
4 голосов
/ 16 апреля 2011

Используя этот класс rtf , я вижу, как конвертируются мои специальные символы, например é becomes \'C3\'A9 (эта часть, вероятно, не проблема)

Как только я получаю его в rtf, используя заголовок php, полученный символ (é) выглядит как é.

header("Content-type: application/rtf; charset=utf-8");
header("Content-Disposition: attachment; filename=$file_rtf");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); 

Странно! Мой файл сохранен в utf-8, для информации.

У меня была похожая проблема при получении Excel, но она решается с помощью

$text = mb_convert_encoding($text,'utf-16','utf-8');

Это не работает для RTF. Спасибо за любую помощь.

PS. Мой файл сохраняется с кодировкой utf-8 thro 'DW, и моя кодировка по умолчанию для mysql также называется utf-8. У меня нет проблемы, когда я отображаю символ непосредственно из базы данных, но эта проблема возникает только тогда, когда я набираю специальный символ непосредственно на странице, прежде чем использовать заголовок.

Приветствие.

Ответы [ 4 ]

7 голосов
/ 17 апреля 2011

Ну, наконец, я решил это, используя:

mb_convert_encoding($text,'ISO-8859-15','utf-8');
5 голосов
/ 17 апреля 2011

Вы получаете двойное кодирование. Символ \N{LATIN SMALL LETTER E WITH ACUTE} - это кодовая точка U + 00E9. В UTF-8 это \xC3\xA9.

Но если вы развернетесь и будете рассматривать эти два байта как разные кодовые точки U + 00C3 и U + 00A9, это будут \N{LATIN CAPITAL LETTER A WITH TILDE} и \N{COPYRIGHT SIGN} соответственно.

Теперь, когда те теперь по очереди получают перекодирован, вы получаете последовательность байтов \xC3\x83\xC2\xA9, которую вы видите.

Вы в системе Windows? Часто кажется, что они дважды перекодируют вещи.

1 голос
/ 02 июля 2013

хмм, с такой же проблемой выдергивание из mysql.Моя страница закодирована в UTF-8, как и моя база данных.Я даже вынуждаю mysqli в режим utf-8, помещая

if (!$mysqli->set_charset("utf8")) {echo "utf8 on";} else {echo "utf8 already on";}; 

, ничего не помогает, я продолжаю получать # 1004 *

, это было мое решение, не красноречивое, но оно работает.

echo str_replace('é', 'é', $mySQLResult);
1 голос
/ 16 апреля 2011

Вы должны спросить автора скрипта, но, судя по документации и предоставленным кодировкам, он не подходит для UTF8. Поэтому вы можете попробовать преобразовать текст в вашу кодовую страницу (например, cp1251) и использовать одну из доступных кодировок в этом классе, чтобы найти наилучшие результаты.

...