2012-02-12 3 views
0

文字列をPDFに変換する作業をしています。典型的な問題は、「スマートクォート」や他のutf-8文字で、これはâ€、â€、â€などのISO文字になります。以下に定義されている機能は、しかし、もちろん、PDFはhtmlではありません。 ’の文字列をアポストロフィの位置に入力すると、この関数は’に変換します。 HTMLを扱っていれば素晴らしいですが、PDFとしては文字列として扱われるため、フォームは決して変換されません。したがって、どのようにhtmlentityを文字正確なフォームに変換しますか? (@Floernのおかげで、https://stackoverflow.com/a/4583465/810821スマート引用符などのエンティティを正確な形式に変換する

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; 
} 

私は間違った用語を使用している場合は

、私の謝罪。

ありがとうございます。

答えて

0

スマートアポストロフィ( ')が’になる場合、問題はUTF-8エンコードされたデータがWindows-1252エンコーディングでバイトシーケンスとして解釈されることです。データが混乱した後でこれを修正しようとするのではなく、間違った解釈を引き起こすコードの部分を見つけて修正する必要があります。

関連する問題