Получая данные из unix консоли, в результате exec()
и других вызовов, не латинские символы обычно экранируются с помощью \x##, где ## - это шестнадцатеричный код символа, но совсем не UTF8.
Например при получении текста сертификата средствами OpenSSL вместо русских будет что-то вроде этого:
C=RU, L=\xD0\x9C\xD0\xBE\xD1\x81\xD0\xBA\xD0\xB2\xD0\xB0,
Для того чтоб перевести это к читаемому виду в в консоли надо сделать:
<ваша команда> | sed 's@+@ @g;s@%@\\x@g' | xargs -0 printf '%b'
А для PHP вот такой код (на всякий случай, перед x стоит 4 обратных слеша):
preg_replace_callback('/\\\\x([0-9A-F]{2})/', function($a){ return pack('H*', $a[1]); }, $your_string);
В результате получаем русский текст:
C=RU, L=Москва,