conn = new PDO( 'sqlite:' . $_SERVER['DOCUMENT_ROOT'] . '/bd/'. BD_NAME . '.db' ); //делаем бэкап if (!file_exists('bd/' . date("Y.m.d") . '.zip')) exec("zip bd/" . date("Y.m.d") . ".zip bd/" . BD_NAME . ".db 9"); $sql = 'PRAGMA foreign_keys=on;'; $this -> conn -> query ( $sql ); break; default: //по умолчанию MySQL $this -> conn = new PDO('mysql:host=' . BD_HOST . ';dbname=' . BD_NAME . ';charset=utf8', BD_USER, BD_PWD); $this -> conn -> exec("set names utf8"); } //Получаем настройки сайта $this->get_settings(); //Получаем текущий модуль $this->get_mod(); //Проверяем есть ли инсталлятор модуля if (file_exists(MYDIR . '/api/modules/' . MOD . '/install_' . BD_TYPE . '.php')) require_once MYDIR . '/api/modules/' . MOD . '/install_' . BD_TYPE . '.php'; $this -> mod_set = $this -> get_settings_mod($mod); } /* ---------------------------------------------------------------------- 06.11.2022 Узнаем текущий модуль ---------------------------------------------------------------------- */ function get_mod(){ //выбор модуля if ( isset ( $_GET['mod'] ) ) define ( 'MOD', @$_GET['mod'] ); else define ( 'MOD', $this->settings['default_mod'] ); } function get_settings($mod='global'){ //Получаем глобальные настройки $b['mod']=$mod; $json=$this->get_val('settings', $b, 'json'); //Если ничего нет, создаем настроки по умолчанию if ( !$json ) $this->free_sql('INSERT INTO `settings` (`id`,`mod`,`json`) VALUES (\'1\',\'global\',\'{"default_mod":"main","default_mod_auth":"main","logo":"","main_page":"1","show_h1":"1","site_name":"Y-CMS","show_news_main_page":"0","show_slider":"0","cat_alias_news":"","news_limit":"10","editor":"","capcha_auth":"","lazyload":"1","show_description_in_cat":"1","cachePage":"1800","email":"","typepage":"2","otzyv":"1","like_page":"1","sezon_img":"1","autoseo":"0","templ":"","h1_page":"1","last_blogs":"","yawebmaster":"","yametrika":"","link_vk":"","link_fb":"","link_instagramm":"","gen_keywords":"","check_https":"1"}\')'); //Расшифровываем json $this -> settings = $this -> from_j( $json ); } function to_log($sql){ if ($this->debug=='1'){ require_once MYDIR . '/api/php/log.php'; $log1 = new save_log; $log1->file_name = @MOD; $log1->print_log($sql); } if ($this->debug=='2')echo $sql; } function clear_json ($text) { // ФУНКЦИЯ очистки кода для xml $old1 = array('\"', '["', '"]' , '}","{', '\/');#Ищем вредное ">",, "<" $new1 = array('"', '[', ']', '},{', '/');#Меняем на полезное">", , "<" $text = str_replace($old1, $new1, $text);#Собсно сама замена =) return $text; } function del_str ($text, $str) { // ФУНКЦИЯ очистки кода для xml $old1 = array($str);#Ищем вредное ">",, "<" $new1 = array('');#Меняем на полезное">", , "<" $text = str_replace($old1, $new1, $text);#Собсно сама замена =) return $text; } function to_j($txt){ return json_encode($txt, JSON_UNESCAPED_UNICODE); } function from_j($txt){ return json_decode($txt, true); } function replacer_param_xml ($text) { // ФУНКЦИЯ очистки кода для xml $old1 = array("<", ">", "/");#Ищем вредное ">",, "<" $new1 = array("", "", "");#Меняем на полезное">", , "<" $text = str_replace($old1, $new1, $text);#Собсно сама замена =) $this -> tmp = $text; } function clean ($text) { // ФУНКЦИЯ очистки кода для xml $old1 = array('"', "'");#Ищем вредное ">",, "<" $new1 = array('\"', "\'");#Меняем на полезное">", , "<" $text = str_replace($old1, $new1, $text);#Собсно сама замена =) return $text; } /* коннект к бд */ function connect($host,$login_mysql,$password_mysql,$baza_name) { $this -> connection = new PDO('mysql:host=yurecnt.ru;dbname=' . $baza_name . ';charset=utf8', $login_mysql, $password_mysql); $this -> connection -> exec("set names utf8"); } //Изменение базы function change_db( $baza_name ) { $this -> connection = new PDO('mysql:host=yurecnt.ru;dbname=' . $baza_name . ';charset=utf8', 'admin', '32143214');//исправить! $this->connection->exec("set names utf8"); } public function get_massiv( $table, $where='', $order='', $limit='', $collums='*' ){ $debug = $this -> debug; @$or_by_desc=$this->or_by_desc; /*where - массив колонок и желаемых значений*/ $sql='SELECT ' . $collums . ' FROM `' . $table . '`'; if ($where){ $sql.=' WHERE '; foreach ($where as $key => $value) @$str.=' `' . $key . '` = "' . $this->clean($value) . '" AND '; /* отрезаем лишнее */ $len = strlen( $str )-4; $sql .= substr( $str, 0, $len ); } /* выясняем сортировку */ if ( $order ) $sql .= ' ORDER BY `' . $order . '` '; if (@$or_by_desc==1)$sql.=' DESC '; if ( $limit ) $sql .= ' LIMIT ' . $limit; /* если указан дебаг, пишем в лог */ if ($debug)$this->to_log($sql); $result = $this -> conn -> query($sql) -> fetchAll( PDO::FETCH_ASSOC ); $this -> num = count($result); return $result; } /* выборка по лайку */ function get_massiv_like($table, $where='', $order='', $limit='', $collums='*'){ $debug=$this->debug; $or_by_decs=$this->or_by_decs; /*where - массив колонок и желаемых значений*/ $sql='SELECT ' . $collums . ' FROM `' . $table . '`'; if ($where){ $sql.=' WHERE '; foreach ($where as $key => $value) @$str.=' `' . $key . '` LIKE "%' . $value . '%" AND '; /* отрезаем лишнее */ $len = strlen( $str )-4; $sql .= substr( $str, 0, $len ); } /* выясняем сортировку */ if ( $order ) $sql .= ' ORDER BY `' . $order . '` '; if ($or_by_desc==1)$sql.=' DESC '; if ( $limit ) $sql .= ' LIMIT ' . $limit; /* если указан дебаг, пишем в лог */ if ($debug)$this->to_log($sql); /* наконец то запрашиваем */ $result=mysql_query($sql); $this -> num = mysql_numrows( $result ); while ( $postrow[] = mysql_fetch_array($result));/*Кидаем в переменную*/ $this -> result = $postrow; unset($postrow); } function free_sql($sql){ if ($this -> debug)$this->to_log($sql); /* наконец то запрашиваем */ //$data = $this -> connection -> query($sql)->fetchAll(PDO::FETCH_ASSOC); // $this -> num = count($data); // $this -> result = $data;//когда нибудь убрать try { $result = $this -> conn -> query($sql) -> fetchAll( PDO::FETCH_ASSOC ); }catch (Exception $e) { $this -> to_log( MOD . ': Выброшено исключение: ' . $e->getMessage() ); } //$row = $result->fetch(); if ($result)$this -> num = count($result); return $result; } function free_sql2($sql){ if ($this -> debug)$this->to_log($sql); /* наконец то запрашиваем */ if ($this -> conn)//убрать костыль, когда будет переписан этот файл $this -> conn -> query($sql); else $this -> connection -> query($sql); } /* простой запрос - одно значение, по одному запросу */ function get_val( $table, $where, $collum ){ $debug = $this -> debug; foreach ( $where as $key => $value ) @$str.=' `' . $key . '` = "' . $value . '" AND '; $len = strlen( $str )-4; $str2 = substr( $str, 0, $len ); $sql = 'SELECT `' . $collum . '` FROM `' . $table . '` WHERE ' . $str2 . ' LIMIT 1'; /* если указан дебаг, пишем в лог */ if ( $debug ) $this -> to_log( $sql ); $result = $this -> conn -> query($sql) -> fetchAll( PDO::FETCH_ASSOC ); $res=$result[0]; return $res[$collum]; } /* Функция добавления контента */ function add($tab, $massiv) { $debug=$this->debug; foreach ($massiv as $key => $value) { if ($key!='ok'){ @$tabs.='`' . $key . '`, '; @$val.="'" . $value . "', "; } } $tabs=substr($tabs, 0, strlen($tabs)-2); $val=substr($val, 0, strlen($val)-2); $sql='insert into `' . $tab . '` (' . $tabs . ') VALUES (' . $val . ')'; //echo $sql; if ($debug)$this->to_log($sql); $this -> conn -> query($sql); //$query = $this->connection->prepare($sql); //$query->execute(); //$this -> id = ;//когда нибудь убрать return $this->conn->lastInsertId(); } /* функция обновления таблиц по ИД */ function update($tab, $id, $massiv) { $debug=$this->debug; foreach ($massiv as $key => $value) { if ($key!='ok') @$res.="`" . $key . "` = '" . $this->clean($value) . "', "; } $res=substr($res, 0, strlen($res)-2); $sql='UPDATE `' . $tab . '` SET ' . $res . ' WHERE `id` = "' . $id . '"'; $this -> conn -> query($sql); if ($debug)$this->to_log($sql); } /* функция обновления таблиц по ИД в формате XML */ function update_xml($tab, $id, $massiv, $base64=0) { $debug=$this->debug; if ($base64==1){ foreach ($massiv as $key => $value) { if ($key!='ok') $res.='<' . $key . '>' . base64_encode( $value ) . ''; } }else{ foreach ($massiv as $key => $value) { if ($key!='ok') $res.='<' . $key . '>' . $this->clean($value) . ''; } } $sql='UPDATE `' . $tab . '` SET `xml` = "' . $res . '" WHERE `id` = "' . $id . '"'; $query = $this->connection->prepare($sql); $query->execute(); if ($debug)$this->to_log($sql); } /* Функция добавления контента */ function add_xml($tab, $massiv, $base64) { $debug=$this->debug; if ($base64==1){ foreach ($massiv as $key => $value) { if ($key!='ok') $res.='<' . $key . '>' . base64_encode($value) . '';} }else{ foreach ($massiv as $key => $value) { if ($key!='ok') $res.='<' . $key . '>' . $value . '';} } $sql='insert into `' . $tab . '` (`xml`) VALUES ("' . $res . '")'; if ($debug)$this->to_log($sql); $query = $this->connection->prepare($sql); $query->execute(); $this -> id = $db->lastInsertId(); } /* функция удаления по ИД */ function del_id ( $tab, $id ) { $debug = $this -> debug; $sql='DELETE FROM `' . $tab . '` WHERE `id` = "' . $id . '"'; $this -> connection -> query($sql); if ( $debug ) $this -> to_log ( $sql ); } /*счетчик записей*/ function count_sql($tab, $where) { $debug=$this->debug; /*where - массив колонок и желаемых значений*/ $sql='SELECT COUNT(*) FROM `' . $tab . '`'; if ($where){ $sql.=' WHERE '; foreach ($where as $key => $value) @$str.=' `' . $key . '` = "' . $value . '" AND '; /* отрезаем лишнее */ $len = strlen( $str )-4; $sql .= substr( $str, 0, $len ); } if ($debug)$this->to_log($sql); /* наконец то запрашиваем */ $res=$this->conn->query($sql); $this -> result = $res->fetchColumn();//когда нибудь убрать return $this -> result; } /* не в тему - но пусть письмо админу будет здесь*/ function send_to_admin($tema, $txt, $email) { include_once MYDIR . '/api/php/sendmail.php'; send_mime_mail( $_SERVER['SERVER_NAME'], 'info@' . $_SERVER['SERVER_NAME'], 'Вы', $email, 'UTF-8', // кодировка, в которой находятся передаваемые строки 'WINDOWS-1251', // кодировка, в которой будет отправлено письмо $tema, $txt); } function get_settings_mod( $mod=MOD ){//получаем настройки модуля из json unset( $a ); $a['mod'] = $mod; //проверяем существование записи $id = $this -> get_val( 'settings', $a, 'id' ); if ( !$id ) $this -> add( 'settings', $a ); $json = $this -> get_val( 'settings', $a, 'json' ); return $this -> from_j( $json ); } /* функция получения настроек модуля del ?? */ /*function get_settings($mod){ unset($a); $a['mod'] = $mod; $xml = $this -> get_val( 'settings', $a, 'xml' ); require_once MYDIR . '/api/php/parsexml.php'; $parce = new parsexml; $parce -> make_massiv ( $xml ); $arr = $parce -> res; unset($tmp); foreach ( $arr as $key => $value ) $tmp[$key] = $value; return $tmp; }*/ function get_settings_json($mod=MOD){ unset($a); $a['mod'] = $mod; $json = $this -> get_val( 'settings', $a, 'json' ); return $this->from_j($json); } function update_settings($massiv){ $m = $this -> get_settings_json( MOD ); } /* Берем двухмерный массив данных $db = new MySQL; $db->connect('localhost','root','','b-install'); $st['id']=1; - какие колонки с каким значением нужны $db -> debug = 2;// 1- пишет лог, 2 показывает на экране $db -> get_massiv ( 'pages', $st, $order, $limit ); //исполняем функцию с параметрами $massiv = $db->result; //получаем результат */ /* Функция вынимает xml профиля юзера */ function userxml($user_id){ unset($a); $a['user_id']=$user_id; $this->get_val('users_profiles', $a, 'xml'); return $this->result; } /* Интернет-магазин */ /* Берем нужные директории категорий */ function get_cat_im($id){ unset($tmp); $tmp['id']=$id; $tmp['public']=1; $tmp['show_mnu']=1; $this->get_massiv('m_groupe', $tmp, 'naim'); return $this->result; } /* Получаем итого заказа найти и удалить */ function zakaz_itog($zakaz_id){ unset($tmp); $tmp['zakaz_id']=$zakaz_id; $tovar = $this -> get_massiv('cart', $tmp); $num = $this -> num; for( $i = 0; $i < $num; $i++ ){ unset($a); $a['id'] = $tovar[$i]['tovar_id']; $cena = $this -> get_val( 'm_tovar', $a, 'akccena' ); if ( $cena < 1 ) $cena = $this -> get_val( 'm_tovar', $a, 'cena' ); $pod_itog[$i] = $cena * $tovar[$i]['col']; unset($cena); } return array_sum($pod_itog); } /* 06.05.2021 проверка прав доступа к нужной записи в нужной таблице */ function check_access( $table, $id, $redirect=0 ){ $dostup = 0; //Все нельзя //модератору и администратору все можно: if ( $_SESSION['dostup']=='a' || $_SESSION['dostup']=='m' ) $dostup = 1; if ( $dostup == 0 ){//Да, условие, чтобы при очевидном не делать лишнего обращения к БД //Берем ИД пользователя из БД и сравниваем с сессией $a['id'] = $id; $user_id = $this -> get_val( $table, $a, 'user_id' ); if ( $user_id == $_SESSION['user_id'] ) $dostup = 1; } if ( $dostup == 0 && $redirect==1) header( 'Location: /403/' ); else return $dostup; } function get_user_id(){//Возвращает либо ид юзера либо ид сессии, в зависимости, авторизовался ли узер if ($_SESSION['user_id']) return $_SESSION['user_id']; else return session_id(); } /* Экранирование SQLite3 */ function magicSQLite($txt){ $old = array('"', ' руб.');#Ищем вредное ">",, "<" $new = array('""', '');#Меняем на полезное">", , "<" $txt = str_replace($old, $new, $txt);#Собсно сама замена =) return $txt; } function user_browser($agent) {//пишем статистику в базу по браузерам //узнаем, есть ли запись об этом пользователе в базе данных... если нет, то определяем браузер и пишем... unset($a); $a['session_id']=session_id(); $a['type']='browser'; $id=$this->get_val('stat', $a, 'id'); if(!$id){ preg_match("/(MSIE|Opera|Firefox|Chrome|Version|Opera Mini|Netscape|Konqueror|SeaMonkey|Camino|Minefield|Iceweasel|K-Meleon|Maxthon)(?:\/| )([0-9.]+)/", $agent, $browser_info); // регулярное выражение, которое позволяет отпределить 90% браузеров list(,$browser,$version) = $browser_info; // получаем данные из массива в переменную if (preg_match("/Opera ([0-9.]+)/i", $agent, $opera)) return 'Opera '.$opera[1]; // определение _очень_старых_ версий Оперы (до 8.50), при желании можно убрать if ($browser == 'MSIE') { // если браузер определён как IE preg_match("/(Maxthon|Avant Browser|MyIE2)/i", $agent, $ie); // проверяем, не разработка ли это на основе IE if ($ie) return $ie[1].' based on IE '.$version; // если да, то возвращаем сообщение об этом return 'IE '.$version; // иначе просто возвращаем IE и номер версии } if ($browser == 'Firefox') { // если браузер определён как Firefox preg_match("/(Flock|Navigator|Epiphany)\/([0-9.]+)/", $agent, $ff); // проверяем, не разработка ли это на основе Firefox if ($ff) return $ff[1].' '.$ff[2]; // если да, то выводим номер и версию } if ($browser == 'Opera' && $version == '9.80') return 'Opera '.substr($agent,-5); // если браузер определён как Opera 9.80, берём версию Оперы из конца строки if ($browser == 'Version') return 'Safari '.$version; // определяем Сафари if (!$browser && strpos($agent, 'Gecko')) return 'Browser based on Gecko'; // для неопознанных браузеров проверяем, если они на движке Gecko, и возращаем сообщение об этом if ($browser){ $res['browser'] = $browser; // для всех остальных возвращаем браузер и версию $res['version'] = $version; // для всех остальных возвращаем браузер и версию $json=$this->to_j($res); $a['json']=$json; $a['data']=date('Y-m-d'); $a['t']=time(); $this->add('stat', $a); } } } /* получаем сезон и выдергиваем картинку */ function sezon_img(){ if ( date("m")=='12' || date('m')=='01' || date('m')=='02' )$sezon='1'; if ( date("m")=='03' || date('m')=='04' || date('m')=='05' )$sezon='2'; if ( date("m")=='06' || date('m')=='07' || date('m')=='08' )$sezon='3'; if ( date("m")=='09' || date('m')=='10' || date('m')=='11' )$sezon='4'; @mkdir (MYDIR . '/files/template', 0700); @mkdir (MYDIR . '/files/template/sezon', 0700); @mkdir (MYDIR . '/files/template/sezon/1', 0700); @mkdir (MYDIR . '/files/template/sezon/2', 0700); @mkdir (MYDIR . '/files/template/sezon/3', 0700); @mkdir (MYDIR . '/files/template/sezon/4', 0700); $src=MYDIR . '/files/template/sezon/' . $sezon; @include_once(MYDIR . '/api/php/list_file.php'); $fl=list_file($src); @$count=count($fl); $rnd=rand(0, $count-1); define( 'SEZON_IMG', '/files/template/sezon/' . $sezon . '/' . $fl[$rnd] ); /* в любое место шаблона поместить поле в файл шаблона JS добавить строку // рандомный сезонный фон var sezon_img=$("#sezon_img").val();$("body").css({ "background-image": "url(" + sezon_img + ")", "background-attachment": "fixed", "background-size": "100%" }); включить в настройках сайта рандомный фон по сезону */ } function resize_img($img, $w=400, $h=400, $zip=100, $square=false, $path){ $big= $_SERVER['DOCUMENT_ROOT'] . '/img/' . $path . '/' . $img . '.jpg'; $small = $_SERVER['DOCUMENT_ROOT'] . '/img/' . $path . '/' . $img . '_' . $w . '_' . $h . '.jpg'; $size = getimagesize ($big); if ( $size[0] > $size[1] ){//ширина больше высоты $min=$size[1]; exec('convert ' . $big . ' -resize ' . $w . ' -quality ' . $zip . ' ' . $small); }else{//высота больше ширины exec('convert ' . $big . ' -resize x' . $h . ' -quality ' . $zip . ' ' . $small); $min=$size[0]; } $size2 = getimagesize ($small); if ( $size2[0] > $size2[1] ){//ширина больше высоты $min=$size2[1]; }else{ $min=$size2[0]; } if ($square==true){ $small_s = $_SERVER['DOCUMENT_ROOT'] . '/img/' . $path . '/' . $img . '_' . $w . '_' . $h . '_s.jpg'; exec('convert ' . $small . ' -gravity Center -crop ' . $min . 'x' . $min . '+0 ' . $small_s); } } function generate_password($number){ $arr = array('a','b','c','d','e','f', 'g','h','i','j','k','l','m','n','o','p','r','s','t','u','v','x','y','z','1','2','3','4','5','6','7','8','9','0'); $pass = ""; for($i = 0; $i < $number; $i++){ $index = rand(0, count($arr) - 1); $pass .= $arr[$index]; } return $pass; } function upload_img($file, $path, $name_file){ if ( preg_match( '/[.](jpg)|(jpeg)|(JPG)|(JPEG)$/', $file[$name_file]['name'] ) ){ @mkdir( $_SERVER['DOCUMENT_ROOT'] . '/img/' . $path, 0700 ); $img_name = $this -> generate_password( 20 ); $source = $file[$name_file]['tmp_name']; $target = $_SERVER['DOCUMENT_ROOT'] . '/img/' . $path . '/' . $img_name . '.jpg'; copy( $source, $target ); } return $img_name; } //берем МАССИВ значений по типу с нужным паррентом из таблицы pages 14.03.2022 function get_massiv_from_pages( $parent=0, $tip ){ if ( $parent=='' ) $parent = 0; unset($a); $a['parent'] = $parent; $a['tip'] = $tip; //print_r($a); $list = $this -> get_massiv ( 'pages', $a, 'txt' ); //print_r( $list ); $num = count( $list ); for( $i = 0; $i < $num; $i++ ){ if ( $list[$i]['id'] ){ unset( $b ); $tmp = $this -> from_j( $this -> clear_json( $list[$i]['json'] ) ); //строку в джейсона в массив $this -> to_log ( $this -> clear_json( $list[$i]['json'] ) ); foreach ( $tmp as $key => $value ) $list[$i][$key] = $value; unset( $tmp ); } } return $list; } //Берем контент по ИД function get_content_from_pages($id){ unset($a); $a['id'] = $id; $list = $this -> get_massiv ( 'pages', $a, 'id', 1 ); //print_r( $list ); $num = count( $list ); for( $i = 0; $i < $num; $i++ ){ if ( $list[$i]['id'] ){ unset( $b ); $tmp = $this -> from_j( $this -> clear_json( $list[$i]['json'] ) ); //строку в джейсона в массив $this -> to_log ( $this -> clear_json( $list[$i]['json'] ) ); foreach ( $tmp as $key => $value ) $list[$i][$key] = $value; unset( $tmp ); } } return $list; } /* 21.05.2022 Берем настройки модуля Читает JSON из таблицы settings нужного модуля и возвращает массив Используется в модулях: main */ function get_mod_settings(){ $a['mod'] = ( MOD == '' ) ? "main" : MOD; //if (MOD)$a['mod']=MOD;else $a['mod']='main'; $json = $this -> get_val( 'settings', $a, 'json' ); $res=$this->from_j($json); return $res; } /* ---------------------------------------------------------------------- 11.06.2022 Подсчет итога в корзине ---------------------------------------------------------------------- */ function get_itog(){ $a['user_id'] = ( $_SESSION['user_id'] ) ? $_SESSION['user_id'] : session_id(); $massiv=$this->get_massiv('cart', $a); $count=count($massiv); $itog=0; for ( $i=0; $i < $count; $i++ ){ unset($a); $a['id']=$massiv[$i]['pages_id']; $cena = $this -> get_val( 'pages', $a, 'cena' ); $itog = $itog + ( $cena * $massiv[$i]['kolvo'] ); } return $itog; } /* ---------------------------------------------------------------------- 17.09.2022 Чиним сломанный json ---------------------------------------------------------------------- */ function json_fix($txt){ //Ищем служебные данные json и прячем $old1 = array('{"', '":"', '"}');#Ищем вредное ">",, "<" $new1 = array("{'", "':'", "'}");#Меняем на полезное">", , "<" $txt = str_replace($old1, $new1, $txt);#Собсно сама замена =) //Ищем ковычки в значениях и меняем на код ковычек $old1 = array('\"', '"');#Ищем вредное ">",, "<" $new1 = array('"', '"');#Меняем на полезное">", , "<" $txt = str_replace($old1, $new1, $txt); //Ищем служебные данные json и возвращаем $old1 = array("{'", "':'", "'}");#Ищем вредное ">",, "<" $new1 = array('{"', '":"', '"}');#Меняем на полезное">", , "<" $txt = str_replace($old1, $new1, $txt);#Собсно сама замена =) return $txt; } /* ---------------------------------------------------------------------- 17.09.2022 Костыль подготовки данных для json ---------------------------------------------------------------------- */ function json_prepare($txt){ $old1 = array('"', "'");#Ищем вредное ">",, "<" $new1 = array('"', "''");#Меняем на полезное">", , "<" $txt = str_replace($old1, $new1, $txt); return $txt; } } ?>