Intereting Posts
PHP: Как установить текущий рабочий каталог таким же, как каталог, выполняющий скрипт Как рассчитать PageViews сайта, используя статистику Alexa (формула?) Свойство "tablename.title" не определено Как я могу использовать простой раскрывающийся список в окне поиска GridView :: widget, Yii2? Как заставить мой сеанс писать в apache Доктрина 2: построение дерева вложенных массивов из самоподдерживающейся сущности PHP HTML5-совместимое видео MP4 с использованием FFMPEG Правила корзины покупок с пользовательским условием? Как получить время выполнения запроса MySQL из PHP? загружать изображения в две разные папки на сервере Php: в чем разница между $ var и & $ var? Symfony 2 – Маршрутизация домашней страницы Создание безопасного входа в систему с использованием сеансов и файлов cookie в PHP Когда я создаю zip-файл каталога с большим zip-файлом в PHP, я сталкиваюсь с ограничением памяти Скрыть цены на товары и кнопки «добавить в корзину», но не изменения для незарегистрированных пользователей в WooCommerce

Отсутствующие символы в JpGraph

У меня есть веб-сайт, который работает в Windows и использует cp1252 (aka Win-1252 ), чтобы он отображал испанские символы. Приложение создает некоторые графики с помощью JpGraph 2.3 . Эти сюжеты используют семейство шрифтов Tahoma Open Type для отображения текстовых меток. Строки предоставляются в ANSI (т.е. cp1252), а файлы шрифтов поддерживают cp1252 (фактически, файлы * .ttf были скопированы из папки шрифтов системы).

Он отлично работает в нескольких настройках от PHP / 5.2.6 до PHP / 5.3.0. Проблемы начались, когда я запускал приложение под PHP / 5.3.1 : все не-ASCII заменяются полым прямоугольником, который представляет отсутствующие или неизвестные символы.

Документация JpGraph не очень точно описывает, как она ожидает международных символов. По-видимому, текст обрабатывается внутри функцией imagettftext (), которая ожидает UTF-8. Однако, кодируя все, поскольку UTF-8 разбивает приложение во всех системах. Если ANSI работает нормально, я получаю неправильные символы ( Ê вместо Ú ). Там, где я получил недостающие символы, теперь я получаю ошибку PHP:

Предупреждение: imagettftext (): any2eucjp (): что-то происходит

Есть ли у вас какие-либо сведения о том, что изменилось в GD2 с PHP / 5.3.0 до 5.3.1, что может повлиять на рендеринг на не-ASCII-символах? Как я ожидаю, чтобы кормить JpGraph со строками в кодировке Win-1252?

Обновить

Наконец, проблема не связана с JpGraph. Я могу воспроизвести проблему с простым вызовом imagettftext ():

 <?php $im = imagecreatetruecolor(400, 30); $white = imagecolorallocate($im, 255, 255, 255); $black = imagecolorallocate($im, 0, 0, 0); imagefilledrectangle($im, 0, 0, 399, 29, $white); //$text = 'áéíóú ÁÉÍÓÚ'; # ANSI $text = utf8_encode('áéíóú ÁÉÍÓÚ'); # UTF8 $font = '/path/to/tahomabd.ttf'; imagettftext($im, 15, 0, 10, 25, $black, $font, $text); header('Content-Type: image/png'); imagepng($im); imagedestroy($im); ?> 

В PHP / 5.3.0 оба ANSI и UTF-8 отображают правильный текст. В PHP / 5.3.1 ANSI отображает неправильные символы, а UTF-8 запускает any2eucjp(): something happen внутренней ошибке. Я бы посмел сказать, что я ударил ошибку …