2013-02-10 2 views
0

Я пытаюсь представить текст для ImageMagick и бросил мне мяч кривой:Использование Unicode символы с Imagemagick и PHP

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

Per http://www.imagemagick.org/Usage/text/#unicode, все, что мне нужно сделать, это обернуть расширенные символы в \ х {}. Используя 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?

EDIT: По отзывам icktoofay, я не думаю, что RegEx - правильное решение. Думаю, мне нужно каким-то образом выполнить мою команду по-другому. Мой код в основном делает:

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

Также открыт для любых возможных дыр в безопасности. Я думаю, что addlashes это сделает, но ...

+0

это тривиально. Что вы пробовали? У вас есть проблемы с удалением обратной косой черты в шаблоне поиска или с созданием шаблона замены? – mario

ответ

2

Я думаю, вы неверно истолковываете этот пример. ImageMagick принимает вход UTF-8. \x{236A} был частью встроенного скрипта Perl, который выводится в ImageMagick. На самом деле то, что вы хотите сделать, это просто передать 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); 
+0

Я действительно пробовал это, передавая строку as-is через "$ cmd =" ​​convert -fill black -font Oswald -pointsize 72 label: '". Addslashes ($ text)."' Logo.png ";" Код действительно работает, но он переваривает расширенные символы. Следующим шагом я попытался преобразовать $ text, как показано в примере ImageMagick. – Anthony

+0

Кстати, я думаю, что вы правы. Я попробовал его в командной строке и почти буквально вывел «B \ x {1ea7} n ch \ x {1ec9} l \ x {00e0} m \ x {1ed9} t anh ngh \ x {00e8o}". Поэтому я думаю, что я ошибаюсь ... – Anthony

+0

@ Энтони: Вы можете попробовать, чтобы ImageMagick читал текст из файла, а не из командной строки. Я обновил свой ответ, чтобы показать эту возможность. – icktoofay

Смежные вопросы