Преобразование смарт-кавычек и других объектов в точную форму

Я работал с преобразованием строк в PDF-файлы. Типичная проблема, которая возникает, — это случайная «умная кавычка» или другой символ utf-8, который становится тем или иным символом ISO, таким как «», «», «,», и т. д. Функция, определенная ниже, решает указанную выше проблему. проблема с кодированием их в html-объекты, однако, конечно, PDF-файл не является html. При вводе строки с ’ вместо апострофа функция преобразует ее в ’. Это здорово, если бы мы имели дело с HTML, но в формате PDF он обрабатывает его как строку, и поэтому его точная форма никогда не преобразуется. Следовательно, как преобразовать htmlentity в точную форму символов?

function htmlallentities($str){
    $res = '';
    $strlen = strlen($str);
    for($i=0; $i<$strlen; $i++){
        $byte = ord($str[$i]);
        if($byte < 128) { // 1-byte char
            $res .= $str[$i];
        } elseif($byte < 192) { // invalid utf8
        } elseif($byte < 224) { // 2-byte char
            $res .= '&#'.((63&$byte)*64 + (63&ord($str[++$i]))).';';
        } elseif($byte < 240) { // 3-byte char
            $res .= '&#'.((15&$byte)*4096 + (63&ord($str[++$i]))*64 + (63&ord($str[++$i]))).';';
        } elseif($byte < 248) { // 4-byte char
            $res .= '&#'.((15&$byte)*262144 + (63&ord($str[++$i]))*4096 + (63&ord($str[++$i]))*64 + (63&ord($str[++$i]))).';';
        }
    }
    return $res;
}

(С благодарностью @Floern, https://stackoverflow.com/a/4583465/810821)

Если я использовал неправильную терминологию, мои извинения.

Заранее спасибо.


person nderjung    schedule 12.02.2012    source источник


Ответы (1)


Если умный апостроф (’) становится ’, проблема заключается в том, что данные в кодировке UTF-8 интерпретируются как последовательность байтов в кодировке Windows-1252. Вместо того, чтобы пытаться исправить это после того, как данные были перепутаны, вы должны найти и исправить часть кода, которая вызывает неправильную интерпретацию.

person Jukka K. Korpela    schedule 12.02.2012