Subversion-Projekte lars-tiefland.php_share

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
<?php
2
// $Header: /cvsroot/html2ps/encoding.inc.php,v 1.7 2006/06/25 13:55:36 Konstantin Exp $
3
 
4
/**
5
 * Converts a hexadecimal string  representing UCS-2 character code to
6
 * UTF-8 encoding
7
 */
8
function hex_to_utf8($code) {
9
  return code_to_utf8(hexdec($code));
10
}
11
 
12
/**
13
 * Converts an UTF8-encoded character to UCS-2 integer code
14
 * TODO: handle sequence incorrect length
15
 */
16
function utf8_to_code($utf8) {
17
  $code = 0;
18
 
19
  if ((ord($utf8{0}) & 0xF0) == 0xF0) {
20
    // 4-byte sequence
21
    $code =
22
      ((ord($utf8{0}) & 0x07) << 18) |
23
      ((ord($utf8{1}) & 0x3F) << 12) |
24
      ((ord($utf8{2}) & 0x3F) <<  6) |
25
      (ord($utf8{3}) & 0x3F);
26
  } elseif ((ord($utf8{0}) & 0xE0) === 0xE0) {
27
    // 3-byte sequence
28
    $code =
29
      ((ord($utf8{0}) & 0x0F) << 12) |
30
      ((ord($utf8{1}) & 0x3F) <<  6) |
31
      (ord($utf8{2}) & 0x3F);
32
  } elseif ((ord($utf8{0}) & 0xC0) === 0xC0) {
33
 
34
    // 2-byte sequence
35
    $code =
36
      ((ord($utf8{0}) & 0x1F) << 6) |
37
      (ord($utf8{1}) & 0x3F);
38
  } else {
39
    // Single-byte sequence
40
    $code = ord($utf8);
41
  };
42
 
43
  return $code;
44
}
45
 
46
/**
47
 * Converts an integer UCS-2 character code to UTF-8 encoding
48
 */
49
function code_to_utf8($code) {
50
  if ($code < 128) {
51
    return chr($code);
52
  };
53
 
54
  if ($code < 2048) {
55
    return chr(0xC0 | (($code >> 6) & 0x1F)) . chr(0x80 | ($code & 0x3F));
56
  };
57
 
58
  if ($code < 65536) {
59
    return chr(0xE0 | (($code >> 12) & 0x0F)) . chr(0x80 | (($code >> 6) & 0x3F)) . chr(0x80 | ($code & 0x3F));
60
  };
61
 
62
  return
63
    chr(0xF0 | (($code >> 18) & 0x07)) .
64
    chr(0x80 | (($code >> 12) & 0x3F)) .
65
    chr(0x80 | (($code >>  6) & 0x3F)) .
66
    chr(0x80 | ($code & 0x3F));
67
}
68
 
69
?>