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 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 
<?php
/* --------------------------------------------------------------
   HtmlUtilityTrait.inc.php 2018-03-06
   Gambio GmbH
   http://www.gambio.de
   Copyright (c) 2018 Gambio GmbH
   Released under the GNU General Public License (Version 2)
   [http://www.gnu.org/licenses/gpl-2.0.html]
   --------------------------------------------------------------
*/

trait HtmlUtilityTrait
{
    function htmlEntityDecodeWrapper($string, $flags = false, $encoding = '')
    {
        $t_flags = $flags;
        if($flags === false)
        {
            if(defined('ENT_HTML401'))
            {
                $t_flags = ENT_COMPAT | ENT_HTML401;
            }
            else
            {
                $t_flags = ENT_COMPAT;
            }
        }
        
        $t_encoding = $encoding;
        if($encoding === '')
        {
            if(isset($_SESSION['language_charset']))
            {
                $t_allowed_charsets_array   = array();
                $t_allowed_charsets_array[] = 'ISO-8859-1';
                $t_allowed_charsets_array[] = 'ISO8859-1';
                $t_allowed_charsets_array[] = 'ISO-8859-15';
                $t_allowed_charsets_array[] = 'ISO8859-15';
                $t_allowed_charsets_array[] = 'UTF-8';
                $t_allowed_charsets_array[] = 'cp866';
                $t_allowed_charsets_array[] = 'ibm866';
                $t_allowed_charsets_array[] = '866';
                $t_allowed_charsets_array[] = 'cp1251';
                $t_allowed_charsets_array[] = 'Windows-1251';
                $t_allowed_charsets_array[] = 'win-1251';
                $t_allowed_charsets_array[] = '1251';
                $t_allowed_charsets_array[] = 'cp1252';
                $t_allowed_charsets_array[] = 'Windows-1252';
                $t_allowed_charsets_array[] = '1252';
                $t_allowed_charsets_array[] = 'KOI8-R';
                $t_allowed_charsets_array[] = 'koi8-ru';
                $t_allowed_charsets_array[] = 'koi8r';
                $t_allowed_charsets_array[] = 'BIG5';
                $t_allowed_charsets_array[] = '950';
                $t_allowed_charsets_array[] = 'GB2312';
                $t_allowed_charsets_array[] = '936';
                $t_allowed_charsets_array[] = 'BIG5-HKSCS';
                $t_allowed_charsets_array[] = 'Shift_JIS';
                $t_allowed_charsets_array[] = 'SJIS';
                $t_allowed_charsets_array[] = '932';
                $t_allowed_charsets_array[] = 'EUC-JP';
                $t_allowed_charsets_array[] = 'EUCJP';
                
                $t_key = array_search(strtolower(trim((string)$_SESSION['language_charset'])),
                                      array_map('strtolower', $t_allowed_charsets_array));
                if($t_key !== false)
                {
                    $t_encoding = $t_allowed_charsets_array[$t_key];
                }
            }
            else
            {
                $t_encoding = 'ISO-8859-1';
            }
        }
        
        return html_entity_decode($string, $t_flags, $t_encoding);
    }
    
    
    function htmlentitiesWrapper($string, $flags = false, $encoding = '', $doubleEncode = true)
    {
        $t_flags = $flags;
        if($flags === false)
        {
            if(defined('ENT_HTML401'))
            {
                $t_flags = ENT_COMPAT | ENT_HTML401;
            }
            else
            {
                $t_flags = ENT_COMPAT;
            }
        }
        
        $t_encoding = $encoding;
        if($encoding === '')
        {
            // search for UTF-8 characters
            if(preg_match('//u', $string))
            {
                $t_encoding = 'UTF-8';
            }
            elseif(isset($_SESSION['language_charset']))
            {
                $t_allowed_charsets_array   = array();
                $t_allowed_charsets_array[] = 'ISO-8859-1';
                $t_allowed_charsets_array[] = 'ISO8859-1';
                $t_allowed_charsets_array[] = 'ISO-8859-15';
                $t_allowed_charsets_array[] = 'ISO8859-15';
                $t_allowed_charsets_array[] = 'UTF-8';
                $t_allowed_charsets_array[] = 'cp866';
                $t_allowed_charsets_array[] = 'ibm866';
                $t_allowed_charsets_array[] = '866';
                $t_allowed_charsets_array[] = 'cp1251';
                $t_allowed_charsets_array[] = 'Windows-1251';
                $t_allowed_charsets_array[] = 'win-1251';
                $t_allowed_charsets_array[] = '1251';
                $t_allowed_charsets_array[] = 'cp1252';
                $t_allowed_charsets_array[] = 'Windows-1252';
                $t_allowed_charsets_array[] = '1252';
                $t_allowed_charsets_array[] = 'KOI8-R';
                $t_allowed_charsets_array[] = 'koi8-ru';
                $t_allowed_charsets_array[] = 'koi8r';
                $t_allowed_charsets_array[] = 'BIG5';
                $t_allowed_charsets_array[] = '950';
                $t_allowed_charsets_array[] = 'GB2312';
                $t_allowed_charsets_array[] = '936';
                $t_allowed_charsets_array[] = 'BIG5-HKSCS';
                $t_allowed_charsets_array[] = 'Shift_JIS';
                $t_allowed_charsets_array[] = 'SJIS';
                $t_allowed_charsets_array[] = '932';
                $t_allowed_charsets_array[] = 'EUC-JP';
                $t_allowed_charsets_array[] = 'EUCJP';
                
                $t_key = array_search(strtolower(trim((string)$_SESSION['language_charset'])),
                                      array_map('strtolower', $t_allowed_charsets_array));
                if($t_key !== false)
                {
                    $t_encoding = $t_allowed_charsets_array[$t_key];
                }
            }
            else
            {
                $t_encoding = 'ISO-8859-1';
            }
        }
        
        return htmlentities($string, $t_flags, $t_encoding, $doubleEncode);
    }
}