Подскажите, кто-нибудь. В настройках модуля есть код: Код: <?php require_once(DIR_SYSTEM . 'library/btform.php'); $btform = new Btform(); global $config; ?> <?php echo $header; ?><?php echo $column_left; ?> <?php if(!empty($slides)){ ?> <?php $slideset = json_decode($slides['slideset'], true);?> <?php $captions = json_decode($slides['caption'], true);?> <?php if(!empty($slider_settings)){$setting = json_decode($slider_settings['setting'], true);}?> <?php } ?> Когда установлены значения полей на англ. - выводится нормально. Как только меняю на русские - слова отображаются в юникоде (типо: u043au0443u043fu0438u0442u044c) Когда удаляю строки кодировки (json) - появляется ошибка. Как убрать кодирование без вреда остальному коду?
нет. Я текст вписываю в поля, которые при сохранении обрабатывает этот кодировщик. Но в коде нужно еще, что бы учитывалась кириллица. Где-то пропущен этот параметр. Вот весь код обработчика json: Код: <?php if (!function_exists('json_encode')) { function json_encode($data) { switch (gettype($data)) { case 'boolean': return $data ? 'true' : 'false'; case 'integer': case 'double': return $data; case 'resource': case 'string': # Escape non-printable or Non-ASCII characters. # I also put the \\ character first, as suggested in comments on the 'addclashes' page. $json = ''; $string = '"' . addcslashes($data, "\\\"\n\r\t/" . chr(8) . chr(12)) . '"'; # Convert UTF-8 to Hexadecimal Codepoints. for ($i = 0; $i < strlen($string); $i++) { $char = $string[$i]; $c1 = ord($char); # Single byte; if ($c1 < 128) { $json .= ($c1 > 31) ? $char : sprintf("\\u%04x", $c1); continue; } # Double byte $c2 = ord($string[++$i]); if (($c1 & 32) === 0) { $json .= sprintf("\\u%04x", ($c1 - 192) * 64 + $c2 - 128); continue; } # Triple $c3 = ord($string[++$i]); if (($c1 & 16) === 0) { $json .= sprintf("\\u%04x", (($c1 - 224) <<12) + (($c2 - 128) << 6) + ($c3 - 128)); continue; } # Quadruple $c4 = ord($string[++$i]); if (($c1 & 8 ) === 0) { $u = (($c1 & 15) << 2) + (($c2 >> 4) & 3) - 1; $w1 = (54 << 10) + ($u << 6) + (($c2 & 15) << 2) + (($c3 >> 4) & 3); $w2 = (55 << 10) + (($c3 & 15) << 6) + ($c4 - 128); $json .= sprintf("\\u%04x\\u%04x", $w1, $w2); } } return $json; case 'array': if (empty($data) || array_keys($data) === range(0, sizeof($data) - 1)) { $output = array(); foreach ($data as $value) { $output[] = json_encode($value); } return '[' . implode(',', $output) . ']'; } case 'object': $output = array(); foreach ($data as $key => $value) { $output[] = json_encode(strval($key)) . ':' . json_encode($value); } return '{' . implode(',', $output) . '}'; default: return 'null'; } } } if (!function_exists('json_decode')) { function json_decode($json, $assoc = false) { $match = '/".*?(?<!\\\\)"/'; $string = preg_replace($match, '', $json); $string = preg_replace('/[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/', '', $string); if ($string != '') { return null; } $s2m = array(); $m2s = array(); preg_match_all($match, $json, $m); foreach ($m[0] as $s) { $hash = '"' . md5($s) . '"'; $s2m[$s] = $hash; $m2s[$hash] = str_replace('$', '\$', $s); } $json = strtr($json, $s2m); $a = ($assoc) ? '' : '(object) '; $data = array( ':' => '=>', '[' => 'array(', '{' => "{$a}array(", ']' => ')', '}' => ')' ); $json = strtr($json, $data); $json = preg_replace('~([\s\(,>])(-?)0~', '$1$2', $json); $json = strtr($json, $m2s); $function = @create_function('', "return {$json};"); $return = ($function) ? $function() : null; unset($s2m); unset($m2s); unset($function); return $return; } }
в самой базе посмотрите как записано! А тот код который указали, обработчик, он и не нужен т.к в php уже есть данные функции.
При сохранении и последующем открытии - слова на русском меняются на юникод. Это западный шаблон - поэтому те, кто создавал его не замарачивались по поводу кириллицы..