当前位置: 首页 > 面试题库 >

PHP函数imagettftext()和unicode

阙项禹
2023-03-14
问题内容

我正在使用PHP函数imagettftext()将文本转换为GIF图像。我要转换的文本具有Unicode字符,包括日语。在我的本地计算机(Ubuntu
7.10)上一切正常,但是在我的Web主机服务器上,日语字符混乱。是什么引起差异?一切都应编码为UTF-8。

Web主机服务器上的图像损坏:http :
//www.ibeni.net/flashcards/imagetest.php

从我的本地机器上复制正确的图像:http :
//www.ibeni.net/flashcards/imagetest.php.gif

从我的本地计算机复制phpinfo():http :
//www.ibeni.net/flashcards/phpinfo.php.html

从我的网络主机服务器复制phpinfo():http :
//example5.nfshost.com/phpinfo

码:

mb_language('uni');
mb_internal_encoding('UTF-8');

header('Content-type: image/gif');

$text = '日本語';
$font = './Cyberbit.ttf';

// Create the image
$im = imagecreatetruecolor(160, 160);
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);

// Create some colors
imagefilledrectangle($im, 0, 0, 159, 159, $white);

// Add the text
imagettftext($im, 12, 0, 20, 20, $black, $font, $text);
imagegif($im);
imagedestroy($im);

问题答案:

这是最终对我有用的解决方案:

$text = "你好";
// Convert UTF-8 string to HTML entities
$text = mb_convert_encoding($text, 'HTML-ENTITIES',"UTF-8");
// Convert HTML entities into ISO-8859-1
$text = html_entity_decode($text,ENT_NOQUOTES, "ISO-8859-1");
// Convert characters > 127 into their hexidecimal equivalents
$out = "";
for($i = 0; $i < strlen($text); $i++) {
    $letter = $text[$i];
    $num = ord($letter);
    if($num>127) {
      $out .= "&#$num;";
    } else {
      $out .=  $letter;
    }
}

将字符串转换为HTML实体是可行的,除了函数imagettftext()不接受命名实体。例如,

&#26085;&#26412;&#35486;

可以,但是

&ccedil;

不是。转换回ISO-8859-1,将命名实体转换回字符,但是还有第二个问题。imagettftext()不支持值大于>
127的字符。最终的for循环将这些字符编码为十六进制。此解决方案对我正在使用的文本有效(包括日语,中文和葡萄牙语的加重拉丁字符),但是我不确定100%可以在所有情况下都适用。

所有这些体操都是必需的,因为imagettftext()在我的服务器上实际上并不接受UTF-8字符串。



 类似资料:
  • 本文向大家介绍PHP的imageTtfText()函数深入详解,包括了PHP的imageTtfText()函数深入详解的使用技巧和注意事项,需要的朋友参考一下 图片处理,是许多程序的功能之一;而文字渲染则是绘图的基本组成部分。PHP通过很多扩展库来支持图片的处理,最常用的还是GD库,通过一系列imagexxx()函数来提供绘图功能。本文专注于非常细小的一点:绘制文字。熟悉Win32的人都知道,Te

  • 问题内容: 是否可以使用JavaScript 从PHP调用函数?如果可以的话,有人可以给我举个例子吗? 那就是我要调用的函数。它的订购系统,你在你多么希望每个项目,点击提交,并键入 应 的顺序添加到表。 问题答案: 您不能从Javascript调用PHP函数… Javascript是一种客户端语言(在收到网页后在Web浏览器上执行),而PHP在服务器端(在呈现网页之前执行)。您无法拨打一个电话。

  • 问题内容: 我需要将JavaScript函数编码为PHP中的JSON对象。 这个: 输出: 我想要的是: 我可以使用json_encode吗? 问题答案: 正如Jani所说,这无法直接通过JSON进行,但这可能对您有帮助:http : //web.archive.org/web/20080828165256/http : //solutoire.com/2008/06/12/sending- ja

  • 问题内容: 我想知道和函数的作用以及如何使用它们。 问题答案: 在第一场比赛后停止寻找。另一方面,继续查找,直到完成对整个字符串的处理为止。找到匹配项后,它将使用字符串的其余部分尝试应用其他匹配项。 http://php.net/manual/zh/function.preg-match- all.php

  • 本文向大家介绍浅谈php数组array_change_key_case() 函数和array_chunk()函数,包括了浅谈php数组array_change_key_case() 函数和array_chunk()函数的使用技巧和注意事项,需要的朋友参考一下 如下所示: 运行结果: 运行结果: 以上就是小编为大家带来的浅谈php数组array_change_key_case() 函数和array_

  • 主要内容:PHP 内建函数,PHP 函数,创建 PHP 函数,语法,实例,PHP 函数 - 添加参数,实例,实例,PHP 函数 - 返回值,实例PHP 的真正威力源自于它的函数。 在 PHP 中,提供了超过 1000 个内建的函数。 PHP 内建函数 如需查看所有数组函数的完整参考手册和实例,请访问我们的 PHP 参考手册。 PHP 函数 在本章中,我们将为您讲解如何创建自己的函数。 如要在页面加载时执行脚本,您可以把它放到函数里。 函数是通过调用函数来执行的。 你可以在页面的任何位置调用函数。