Blame view

pma/libraries/iconv_wrapper.lib.php 3.04 KB
a1684257   Administrator   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
  <?php
  /* vim: set expandtab sw=4 ts=4 sts=4: */
  /**
   *
   * @package PhpMyAdmin
   */
  if (! defined('PHPMYADMIN')) {
      exit;
  }
  
  /**
   *
   */
  # GNU iconv code set to IBM AIX libiconv code set table
  # Keys of this table should be in lowercase, and searches should be performed using lowercase!
  $gnu_iconv_to_aix_iconv_codepage_map = array (
      // "iso-8859-[1-9]" --> "ISO8859-[1-9]" according to http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/libs/basetrf2/setlocale.htm
      'iso-8859-1' => 'ISO8859-1',
      'iso-8859-2' => 'ISO8859-2',
      'iso-8859-3' => 'ISO8859-3',
      'iso-8859-4' => 'ISO8859-4',
      'iso-8859-5' => 'ISO8859-5',
      'iso-8859-6' => 'ISO8859-6',
      'iso-8859-7' => 'ISO8859-7',
      'iso-8859-8' => 'ISO8859-8',
      'iso-8859-9' => 'ISO8859-9',
  
      // "big5" --> "IBM-eucTW" according to http://kadesh.cepba.upc.es/mancpp/classref/ref/ITranscoder_DSC.htm
      'big5' => 'IBM-eucTW',
  
      // Other mappings corresponding to the phpMyAdmin dropdown box when using the charset conversion feature
      'euc-jp' => 'IBM-eucJP',
      'koi8-r' => 'IBM-eucKR',
      'ks_c_5601-1987' => 'KSC5601.1987-0',
      'tis-620' => 'TIS-620',
      'utf-8' => 'UTF-8'
  );
  
  /**
   * Wrapper around IBM AIX iconv(), whose character set naming differs
   * from the GNU version of iconv().
   *
   * @param string   input character set
   * @param string   output character set
   * @param string   the string to convert
   *
   * @return  mixed    converted string or false on failure
   *
   * @access  public
   *
   */
  function PMA_aix_iconv_wrapper($in_charset, $out_charset, $str)
  {
  
      global $gnu_iconv_to_aix_iconv_codepage_map;
  
      // Check for transliteration argument at the end of output character set name
      $translit_search = strpos(strtolower($out_charset), '//translit');
      $using_translit = (!($translit_search === false));
  
      // Extract "plain" output character set name (without any transliteration argument)
      $out_charset_plain = ($using_translit ? substr($out_charset, 0, $translit_search) : $out_charset);
  
      // Transform name of input character set (if found)
      if (array_key_exists(strtolower($in_charset), $gnu_iconv_to_aix_iconv_codepage_map)) {
          $in_charset = $gnu_iconv_to_aix_iconv_codepage_map[strtolower($in_charset)];
      }
  
      // Transform name of "plain" output character set (if found)
      if (array_key_exists(strtolower($out_charset_plain), $gnu_iconv_to_aix_iconv_codepage_map)) {
          $out_charset_plain = $gnu_iconv_to_aix_iconv_codepage_map[strtolower($out_charset_plain)];
      }
  
      // Add transliteration argument again (exactly as specified by user) if used
      // Build the output character set name that we will use
      $out_charset = ($using_translit ? $out_charset_plain . substr($out_charset, $translit_search) : $out_charset_plain);
  
      // NOTE: Transliteration not supported; we will use the "plain" output character set name
      $out_charset = $out_charset_plain;
  
      // Call iconv() with the possibly modified parameters
      $result = iconv($in_charset, $out_charset, $str);
      return $result;
  } //  end of the "PMA_aix_iconv_wrapper()" function
  
  ?>