Рубрики
Uncategorized

Способ решения проблемы искаженного китайского кода в графическом интерфейсе, вызванного PHP в мониторинге ZABBIX

Автор оригинала: David Wong.

Чтобы решить проблему искаженного китайского языка в графическом интерфейсе системы мониторинга ZABBIX, вызванную добавлением – включите опцию GD JIS conv при компиляции PHP

Феномен:

Параметры компиляции PHP:

объяснять:

Если опция – enable GD JIS conv включена во время компиляции PHP, символы, отличные от ASCII (такие как китайские иероглифы, Пиньинь, греческий и стрелки), будут рассматриваться как кодировка euc-jp ( информация о php называется “шрифт, поддерживающий кодировку JIS”), что приведет к искажению кода (поскольку западные шрифты не содержат символов кана или китайских символов, они обычно представлены как все поля). Функция imagettftext () – это функция, которая записывает символы в изображение. Эта проблема вызвана этой функцией.

Ниже приведена моя производственная практика в версии zabbix3.2, версия php7.2

Способ 1

Перекомпилируйте и установите PHP, а также отключите опцию – включить GD JIS conv, которая стоит дорого;

Способ 2

Поскольку PHP долгое время использовался в производственной среде, я не знаю, использовался ли он или нет, поэтому Я не решаюсь легко перекомпилировать его, поэтому решаю его в соответствии с методом 2

Шаг первый:

остаться /и т.д./nginx/html/zabbix/включить Пересмотрен в graphs.inc.php Файл (сначала резервное копирование)

cp graphs.inc.php graphs.inc.php.bak

напор graphs.inc.php #Добавьте следующий код в конце

function to_entities($string){
 $len = strlen($string);
 $buf = "";
 for($i = 0; $i < $len; $i++){
  if (ord($string[$i]) <= 127){
   $buf .= $string[$i];
  } else if (ord ($string[$i]) <192){
   //unexpected 2nd, 3rd or 4th byte
   $buf .= "?";
  } else if (ord ($string[$i]) <224){
   //first byte of 2-byte seq
   $buf .= sprintf("%d;",
    ((ord($string[$i + 0]) & 31) << 6) +
    (ord($string[$i + 1]) & 63)
   );
   $i += 1;
  } else if (ord ($string[$i]) <240){
   //first byte of 3-byte seq
   $buf .= sprintf("%d;",
    ((ord($string[$i + 0]) & 15) << 12) +
    ((ord($string[$i + 1]) & 63) << 6) +
    (ord($string[$i + 2]) & 63)
   );
   $i += 2;
  } else {
   //first byte of 4-byte seq
   $buf .= sprintf("%d;",
    ((ord($string[$i + 0]) & 7) << 18) +
    ((ord($string[$i + 1]) & 63) << 12) +
    ((ord($string[$i + 2]) & 63) << 6) +
    (ord($string[$i + 3]) & 63)
   );
   $i += 3;
  }
 }
 return $buf;
}

Шаг 2:

Найдите функцию imagettftext() в этом файле (всего три места)

Измените последний параметр $string на to_entities($string) , три места необходимо изменить, не нужно перезапускать, обновление может решить проблему.

резюме

Выше приведена небольшая серия, чтобы познакомить вас с решением проблем мониторинга ZABBIX, вызванных китайским искаженным методом графического интерфейса PHP, я надеюсь помочь вам, если у вас есть какие-либо вопросы, пожалуйста, оставьте мне сообщение, небольшая серия ответит вам вовремя. Большое вам спасибо за вашу поддержку разработчику! Если вы считаете, что эта статья полезна для вас, пожалуйста, перепечатайте, пожалуйста, укажите источник, спасибо!

Оригинал: “https://developpaper.com/a-method-to-solve-the-problem-of-chinese-garbled-code-in-graphic-interface-caused-by-php-in-zabbix-monitoring/”