Большое спасибо за быстрый ответ.
Я начал дальше ковырять Graphviz в PHP и заметил, что если я просто создаю граф с кириллицей
code text
$graph = new Image_GraphViz();
$graph->addNode('Рус');
$graph->addNode('Щэковиця і Хоривиця');
$graph->addNode('Кириллица');
$graph->addEdge(
array('Рус' => 'Щэковиця і Хоривиця'),
array('label' => 'Edge Label')
);
$name = 'graph.jpg';
$path = 'graphs/' . $name;
$img = $graph->fetch('jpg');
file_put_contents($path, $img);
то он создаётся правильно.
А когда я пытаюсь выводить на графе записи из бд, в которой кодировка cp1251, то граф не создаётся.
Последовал вашему совету, и посмотрел на сгенерированную команду:
code text
dot -T"jpg" -o"C:\Documents and Settings\User\Local Settings\Temp\gra40.tmp.jpg" "C:\Documents and Settings\User\Local Settings\Temp\gra40.tmp" 2>&1
Дот файл получился таким:
code text
strict digraph G {
"2009-03-17 00:00:00";
iFactory;
"Пользователи в роли разработчиков";
}
При этом я ещё в пхп выводил какую кодировку имеет каждая из строк:
code text
add node: 2009-03-17 00:00:00
encoding: ASCII
add node: iFactory
encoding: ASCII
add node: Пользователи в роли разработчиков
encoding: UTF-8
Немного удивляет почему последняя строка в кодировке утф-8, если она была вытянута из бд (впрочем, как и первые две).
Может быть Графвиз отказывается нормально работать на винде?
п.с. Попробовал открыть сохранённый дот файл в программке Gvedit и запустить построение графа. Gvedit показал следующую ошибку:
code text
executing->C:\Program Files\Graphviz2.26.3\bin\\dot.exe -Tgif -o"C:\dotfile.gif" -Kdot
Error: Invalid 2-byte UTF8 found in input. Perhaps "-Gcharset=latin1" is needed?
п.п.с. временно решил проблему, почесав левой ногой правое ухо:
- установил последнюю версию графвиз (2.28, странно, но ещё недели две назад была доступна лишь 2.27)
- мне видимо дико повезло, так как русский шрифт начал в версии 2.28 немного работать
- к сожалению, из пхп, рисунок с графом так и не рисуется, но благодаря Вашей идее смотреть на результирующий дот файл, я сохраняю этот файл, а потом вручную запускаю его в программе Gvedit и он рисует мне нужный граф.