Преобразование умных цитат и других объектов в точную форму - PullRequest
0 голосов
/ 12 февраля 2012

Я работал с преобразованием строк в 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)

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

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

1 Ответ

0 голосов
/ 12 февраля 2012

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

...