Welcome to mirror list, hosted at ThFree Co, Russian Federation.

iconv_wrapper.lib.php « libraries - github.com/phpmyadmin/phpmyadmin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 67ee0a14af7c6f39b3c2dd568f24a51b4ca7cd56 (plain)
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
 * Iconv wrapper for AIX
 *
 * @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 $in_charset  input character set
 * @param string $out_charset output character set
 * @param string $str         the string to convert
 *
 * @return mixed    converted string or false on failure
 *
 * @access  public
 *
 */
function PMA_convertAIXIconv($in_charset, $out_charset, $str)
{
    list($in_charset, $out_charset) = PMA_convertAIXMapCharsets(
        $in_charset, $out_charset
    );
    // Call iconv() with the possibly modified parameters
    return iconv($in_charset, $out_charset, $str);
} //  end of the "PMA_convertAIXIconv()" function

/**
 * Maps input and output character set names to corresponding AIX ones
 *
 * @param string $in_charset  input character set
 * @param string $out_charset output character set
 *
 * @return array array of mapped input and output character set names
 */
function PMA_convertAIXMapCharsets($in_charset, $out_charset)
{
    global $gnu_iconv_to_aix_iconv_codepage_map;

    /** @var PMA_String $pmaString */
    $pmaString = $GLOBALS['PMA_String'];

    // Check for transliteration argument at the end of output character set name
    $translit_search = $pmaString->strpos(
        $pmaString->strtolower($out_charset),
        '//translit'
    );
    $using_translit = (!($translit_search === false));

    // Extract "plain" output character set name
    // (without any transliteration argument)
    $out_charset_plain = ($using_translit
        ? $pmaString->substr($out_charset, 0, $translit_search)
        : $out_charset);

    // Transform name of input character set (if found)
    $in_charset_exisits = array_key_exists(
        $pmaString->strtolower($in_charset),
        $gnu_iconv_to_aix_iconv_codepage_map
    );
    if ($in_charset_exisits) {
        $in_charset = $gnu_iconv_to_aix_iconv_codepage_map[
            $pmaString->strtolower($in_charset)
        ];
    }

    // Transform name of "plain" output character set (if found)
    $out_charset_plain_exists = array_key_exists(
        $pmaString->strtolower($out_charset_plain),
        $gnu_iconv_to_aix_iconv_codepage_map
    );
    if ($out_charset_plain_exists) {
        $out_charset_plain = $gnu_iconv_to_aix_iconv_codepage_map[
            $pmaString->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
    /* Not needed because always overwritten
    $out_charset = ($using_translit
        ? $out_charset_plain . $pmaString->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;

    return array($in_charset, $out_charset);
}

?>