source: pmb4.2/trunk/fuentes/pmb/classes/encoding_normalize.class.php @ 815

Last change on this file since 815 was 815, checked in by jrpelegrina, 4 years ago

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 5.0 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2014 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: encoding_normalize.class.php,v 1.4 2015-06-09 15:38:43 pmbs Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9
10class encoding_normalize {
11       
12        protected static function utf8_encode($elem){
13                if(is_array($elem)){
14                        foreach ($elem as $key =>$value){
15                                $elem[$key] = encoding_normalize::utf8_encode($value);
16                        }
17                }else if(is_object($elem)){
18                        $elem = encoding_normalize::obj2array($elem);
19                        $elem = encoding_normalize::utf8_encode($elem);
20                }else{
21                        $elem = utf8_encode($elem);
22                }
23                return $elem;
24        }
25       
26        public static function utf8_normalize($elem){
27                global $charset;
28                if($charset != "utf-8"){
29                        return encoding_normalize::utf8_encode($elem);
30                }else{
31                        return $elem;
32                }
33        }
34       
35       
36        protected static function obj2array($obj){
37                $array = array();
38                if(is_object($obj)){
39                        foreach($obj as $key => $value){
40                                if(is_object($value)){
41                                        $value = encoding_normalize::obj2array($value);
42                                }
43                                $array[$key] = $value;
44                        }
45                }else{
46                        $array = $obj;
47                }
48                return $array;
49        }
50       
51        protected static function charset_normalize($elem,$input_charset){
52                global $charset;
53                if(is_array($elem)){
54                        foreach ($elem as $key =>$value){
55                                $elem[$key] = encoding_normalize::charset_normalize($value,$input_charset);
56                        }
57                }else{
58                        //PMB dans un autre charset, on converti la chaine...
59                        $elem = self::clean_cp1252($elem, $input_charset);
60                        if($charset != $input_charset){
61                                $elem = iconv($input_charset,$charset,$elem);
62                        }
63                }
64                return $elem;
65        }
66       
67        public static function json_encode($obj){
68                return json_encode(self::utf8_normalize($obj),JSON_HEX_APOS | JSON_HEX_QUOT);
69        }
70       
71        public static function clean_cp1252($str,$charset){
72                switch($charset){
73                        case "utf-8" :
74                                $cp1252_map = array(
75                                        "\xe2\x82\xac" => "EUR", /* EURO SIGN */
76                                        "\xe2\x80\x9a" => "\xc2\xab", /* SINGLE LOW-9 QUOTATION MARK */
77                                        "\xc6\x92" => "\x66",     /* LATIN SMALL LETTER F WITH HOOK */
78                                        "\xe2\x80\9e" => "\xc2\xab", /* DOUBLE LOW-9 QUOTATION MARK */
79                                        "\xe2\x80\xa6" => "...", /* HORIZONTAL ELLIPSIS */
80                                        "\xe2\x80\xa0" => "?", /* DAGGER */
81                                        "\xe2\x80\xa1" => "?", /* DOUBLE DAGGER */
82                                        "\xcb\x86" => "?",     /* MODIFIER LETTER CIRCUMFLEX ACCENT */
83                                        "\xe2\x80\xb0" => "?", /* PER MILLE SIGN */
84                                        "\xc5\xa0" => "S",   /* LATIN CAPITAL LETTER S WITH CARON */
85                                        "\xe2\x80\xb9" => "\x3c", /* SINGLE LEFT-POINTING ANGLE QUOTATION */
86                                        "\xc5\x92" => "OE",   /* LATIN CAPITAL LIGATURE OE */
87                                        "\xc5\xbd" => "Z",   /* LATIN CAPITAL LETTER Z WITH CARON */
88                                        "\xe2\x80\x98" => "\x27", /* LEFT SINGLE QUOTATION MARK */
89                                        "\xe2\x80\x99" => "\x27", /* RIGHT SINGLE QUOTATION MARK */
90                                        "\xe2\x80\x9c" => "\x22", /* LEFT DOUBLE QUOTATION MARK */
91                                        "\xe2\x80\x9d" => "\x22", /* RIGHT DOUBLE QUOTATION MARK */
92                                        "\xe2\x80\xa2" => "\b7", /* BULLET */
93                                        "\xe2\x80\x93" => "\x20", /* EN DASH */
94                                        "\xe2\x80\x94" => "\x20\x20", /* EM DASH */
95                                        "\xcb\x9c" => "\x7e",   /* SMALL TILDE */
96                                        "\xe2\x84\xa2" => "?", /* TRADE MARK SIGN */
97                                        "\xc5\xa1" => "s",   /* LATIN SMALL LETTER S WITH CARON */
98                                        "\xe2\x80\xba" => "\x3e;", /* SINGLE RIGHT-POINTING ANGLE QUOTATION*/
99                                        "\xc5\x93" => "oe",   /* LATIN SMALL LIGATURE OE */
100                                        "\xc5\xbe" => "z",   /* LATIN SMALL LETTER Z WITH CARON */
101                                        "\xc5\xb8" => "Y"    /* LATIN CAPITAL LETTER Y WITH DIAERESIS*/
102                                );
103                                break;
104                        case "iso8859-1" :
105                                $cp1252_map = array(
106                                        "\x80" => "EUR", /* EURO SIGN */
107                                        "\x82" => "\xab", /* SINGLE LOW-9 QUOTATION MARK */
108                                        "\x83" => "\x66",     /* LATIN SMALL LETTER F WITH HOOK */
109                                        "\x84" => "\xab", /* DOUBLE LOW-9 QUOTATION MARK */
110                                        "\x85" => "...", /* HORIZONTAL ELLIPSIS */
111                                        "\x86" => "?", /* DAGGER */
112                                        "\x87" => "?", /* DOUBLE DAGGER */
113                                        "\x88" => "?",     /* MODIFIER LETTER CIRCUMFLEX ACCENT */
114                                        "\x89" => "?", /* PER MILLE SIGN */
115                                        "\x8a" => "S",   /* LATIN CAPITAL LETTER S WITH CARON */
116                                        "\x8b" => "\x3c", /* SINGLE LEFT-POINTING ANGLE QUOTATION */
117                                        "\x8c" => "OE",   /* LATIN CAPITAL LIGATURE OE */
118                                        "\x8e" => "Z",   /* LATIN CAPITAL LETTER Z WITH CARON */
119                                        "\x91" => "\x27", /* LEFT SINGLE QUOTATION MARK */
120                                        "\x92" => "\x27", /* RIGHT SINGLE QUOTATION MARK */
121                                        "\x93" => "\x22", /* LEFT DOUBLE QUOTATION MARK */
122                                        "\x94" => "\x22", /* RIGHT DOUBLE QUOTATION MARK */
123                                        "\x95" => "\b7", /* BULLET */
124                                        "\x96" => "\x20", /* EN DASH */
125                                        "\x97" => "\x20\x20", /* EM DASH */
126                                        "\x98" => "\x7e",   /* SMALL TILDE */
127                                        "\x99" => "?", /* TRADE MARK SIGN */
128                                        "\x9a" => "S",   /* LATIN SMALL LETTER S WITH CARON */
129                                        "\x9b" => "\x3e;", /* SINGLE RIGHT-POINTING ANGLE QUOTATION*/
130                                        "\x9c" => "oe",   /* LATIN SMALL LIGATURE OE */
131                                        "\x9e" => "Z",   /* LATIN SMALL LETTER Z WITH CARON */
132                                        "\x9f" => "Y"    /* LATIN CAPITAL LETTER Y WITH DIAERESIS*/
133                                );
134                                break;
135                }
136                return strtr($str, $cp1252_map);
137        }
138}
Note: See TracBrowser for help on using the repository browser.