@betal

Кодировки с exec и svn?

Есть простейший код.
exec(' svn log /var/www/new/svn/ | head -n100 ',$str);<br/>
for ($i=0;isset($str[$i]);$i++){<br/>
echo $str[$i],'&lt;бр /&gt;';<br/>
}


Но выводится вместо русских букв символы типа
?\208?\152?\208?\183?\208?\188?\208?\181?\208?\189?\208?\181?\208?\189?\208?\176 ?\209?\135?\208?\176?\209?\129?\209?\130?\209?\140 ?\209?\130?\208?\176?\208?\177?\208?\187?\208?\184?\209?\134


Пытался экспериментировать с iconv, но ничего не получилось.

Для кого-то это возможно простая задача, но толком информации в интернете не нашел.
  • Вопрос задан
  • 4053 просмотра
Пригласить эксперта
Ответы на вопрос 3
Kakysha
@Kakysha
Тут тоже ребята мучаются, может вам что-то поможет: stackoverflow.com/questions/6065557/unicode-to-php-exec
Ответ написан
Комментировать
@LastDragon
Именно iconv-ом оно и лечится, например, для WinXP:
$svn_message = iconv('CP866', 'UTF-8', $svn_message);

Кроме этого, передаваемые команде данные тоже необходимо конвертировать в правильную кодировку.

Полный рабочий пример получения лога svn (код для mantis-а):
pastebin.mozilla-russia.org/109216
Ответ написан
Комментировать
@betal Автор вопроса
Сам и выкрутился…
код очень криворук получился, поскольку не помню как работать с регулярными выражениями, но смысл в том чтобы понять как кодируется сообщение. Если кто подскажет какой должен быть второй параметр, буду благодарен.

$output = shell_exec("svn log --limit 25 /var/www/new/svn/");
$output = nl2br ($output);
$output = preg_replace("/\?\\\\(\d+)/e","aaabbbcccddd$1rrrtttyyyuuu",$output);
$output = str_replace ('aaabbbcccddd','&#',$output);
$output = str_replace ('rrrtttyyyuuu',';',$output);
$output = html_entity_decode($output,ENT_NOQUOTES,"cp1252");
echo $output;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы