我一直致力于将字符串转换为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)
如果我使用了错误的术语,我很抱歉。
提前谢谢。
答案 0 :(得分:0)
如果智能撇号(')成为,那么问题是UTF-8编码数据被解释为windows-1252编码中的字节序列。您应该找到并修复导致错误解释的代码部分,而不是在数据搞砸后尝试修复此问题。