0

我正在尝试为 imagemagick 提供文本,它给了我一个曲线球:

Bần chỉ là một anh nghèo

根据http://www.imagemagick.org/Usage/text/#unicode,我需要做的就是将扩展字符包装在 \x{} 中。使用 json_encode,我可以轻松接近:

print json_encode("Bần chỉ là một anh nghèo");  // Output is "B\u1ea7n ch\u1ec9 l\u00e0 m\u1ed9t anh ngh\u00e8o"

现在,我需要做的就是把它从"B\u1ea7n ch\u1ec9 l\u00e0 m\u1ed9t anh ngh\u00e8o""B\x{1ea7}n ch\x{1ec9} l\x{00e0} m\x{1ed9}t anh ngh\x{00e8o}"

关于 PHP 中的正则表达式有什么建议吗?

编辑:根据 icktoofay 的反馈,我认为 RegEx 不是正确的解决方案。我想我需要以不同的方式执行我的命令。我的代码基本上是在做:

$cmd = "convert -fill black -font Oswald -pointsize 72 label:'" . addslashes($text) . "' logo.png"
exec($cmd);

也可以在这里打开任何可能的安全漏洞。我认为addlashes会做到这一点,但是......

4

1 回答 1

2

我认为你误解了这个例子。ImageMagick 采用 UTF-8 输入。这\x{236A}是输出到 ImageMagick 的嵌入式 Perl 脚本的一部分。真的,你要做的只是给 ImageMagick 一些 UTF-8 文本。


仔细研究一下,我猜你的问题是 PHP 没有以理智的方式处理 UTF-8 命令行参数。我检查了是否有另一种方式(比如,execv),不幸的是,没有。一种解决方法可能是写入临时文件并使用 ImageMagick 的@语法:

$temp_file_name = tempnam(sys_get_temp_dir(), "txt");
file_put_contents($temp_file_name, $text);
$cmd = "convert ... label:@" . escapeshellarg($temp_file_name) . "...";
exec($cmd);
unlink($temp_file_name);
于 2013-02-10T02:54:37.053 回答