Я пытаюсь создать документ, который содержит расширенные символы ASCII. Для текста, поступающего от клиента, работает следующее:
// Convert from UTF-8 to ISO-8859-1 - Deal with Spanish characters
setlocale(LC_ALL, 'en_US.UTF-8');
foreach ($_POST as $key => $value){
$post[$key] = iconv("UTF-8", "ISO-8859-1", $value);
}
$pdf->Cell(0, 0, $post["Name"], 0, 1);
Тем не менее, я не могу заставить текст в файле PHP работать. Например:
$name = "José";
Я не знаю, какую кодировку использует переменная. В результате я не могу преобразовать это в ISO-8859-1. Это искажается.
Редактировать:
Я переписываю программу, которая генерирует документы PDF (некоторые на испанском языке). Если я копирую текст из существующих PDF-файлов, я получаю следующее: (что выглядит нормально в документе PDF и в IDE, но не может быть напечатано с использованием FPDF с использованием шрифтов CP1252 или ISO-8859-1).
$Name = "José" // Jos\x65\xcc\x81 - I have no idea what encoding is used for the é
Изменение расширенных символов на UTF-8 решает проблему:
$Name = "José" // Jos\xC3\xA9 - UTF-8
Когда я преобразую символы в кодировке UTF-8 в ISO-8859-1 для вывода в FPDF, PDF-файл содержит трехсимвольную версию символа é.
2-е редактирование: Эквивалентность Unicode из Википедии
Unicode предоставляет два понятия, каноническая эквивалентность и
совместимость. Последовательности кодовых точек, которые определены как канонические
предполагается, что эквивалентные имеют одинаковый внешний вид и значение, когда
напечатано или показано. Например, кодовая точка U + 006E (лат.
строчная буква «n»), за которой следует U + 0303 (тильда объединения «◌̃»)
определяется Unicode как канонически эквивалентный одному коду
точка U + 00F1 (строчная буква «ñ» испанского алфавита).
Поэтому эти последовательности должны отображаться одинаково,
должны быть одинаково обработаны такими приложениями, как
алфавитные имена или поиск, и могут быть заменены для каждого
Другой.
Это долгий путь перефразирования комментария @ smith, что мне просто нужно получить TCPDF или что-то, что будет правильно обрабатывать UTF-8. Следует отметить, что я получаю сообщение об ошибке в PHP iconv, поэтому я не совсем уверен, что его можно устранить, переключившись на TCPDF.
Задача ещё не решена.
Других решений пока нет …