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);

また、ここで考えられるセキュリティホールを開いてください。アッドラッシュでうまくいくと思いますが...

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 に答える