【问题标题】:Converting smart quotes and other entities to exact form将智能引号和其他实体转换为精确形式
【发布时间】:2012-02-12 16:39:35
【问题描述】:

我一直致力于将字符串转换为 PDF。出现的一个典型问题是偶尔出现的“智能引号”或其他 utf-8 字符,它们会变成一个或另一个 ISO 字符,例如“、”、“”、“”等。下面定义的函数解决了说通过将它们编码为html实体来解决问题,但是,PDF当然不是html。当输入带有’ 的字符串作为撇号 时,该函数将其转换为’。如果我们处理 HTML,那就太好了,但作为 PDF,它会将其视为字符串,因此它的确切形式永远不会被转换。那么,如何将htmlentity转换为exact字符形式呢?

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

如果我使用了不正确的术语,我深表歉意。

提前谢谢你。

【问题讨论】:

    标签: php unicode character-encoding html-entities iso


    【解决方案1】:

    如果智能撇号 (') 变为 ’,那么问题在于 UTF-8 编码的数据在 windows-1252 编码中被解释为字节序列。与其在数据混乱后尝试修复此问题,不如找到并修复导致错误解释的代码部分。

    【讨论】:

      猜你喜欢
      • 2012-03-12
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 2014-11-09
      • 2013-01-31
      • 2010-10-14
      相关资源
      最近更新 更多