【发布时间】: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