我写了一个小的 PHP 脚本,它在当前的 PDF 文件上做一个“品牌化”。这意味着在每一页上,我都会在特殊位置放置一个类似“属于”的字符串。因此,我使用 Zend 框架之外的 Zend_Pdf。由于该脚本用于德语区域,因此在其中的一行中我使用了特殊字符“ö”(“Gehört zu”)。
在我的本地计算机(Windows、XAMPP)上,脚本运行良好,但是当将其移动到我的主机空间(某些 Linux)时,字符串在“ö”处中断。这意味着在我的 PDF 中出现“Geh”。
代码是这样的:
if (substr($file, strlen($file) - 4) === '.pdf') {
$name = $user->GetName;
$fontSize = 12;
$xTextPos = 100;
$yTextPos = 10;
set_include_path(dirname(__FILE__)); // set include_path for external library Zend Framework
require_once('Zend' .DS . 'Pdf.php');
$pdf = Zend_Pdf::load($file);
$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
$branding = 'Gehört zu ' . $name; // German for: 'Belongs to ', problem with 'ö'
foreach ($pdf->pages as &$page) {
$page->setFont($font, $fontSize);
$page->drawText($branding, $xTextPos, $yTextPos);
}
}
我猜这个问题与 PHP 环境的某种默认字符集或语言设置有关。所以我在这里搜索并尝试了:
$branding = utf8_encode('Gehört zu ') . $name;
...我对 html_entity_decode 之类的函数进行了一些实验,但没有任何帮助,我决定停止在黑暗中摸索并提出自己的问题。
期待任何提示。预先感谢您的帮助!
编辑:同时我发现了同样的(?)问题,在德国论坛上解决了。但如果我像他们说的那样做...
$branding = mb_convert_encoding('Gehört zu ', 'ISO-8859-1') . $name;
... PDF 中的最终品牌是“Gehrt zu”。现在跳过“ö”。
我总结一下,我可以放弃所有 UTF8 的东西并专注于 Latin-1 AKA ISO 8859-1。
我仍然不明白为什么代码在我的 Windows + XAMPP 上工作,现在在我的主机 Linux 上崩溃。