Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Ламерские вопросы » Помогите разобраться с кодировкой

Помогите разобраться с кодировкой


     02.08.2013    кодировка    Все вопросы » Ламерские вопросы    3805

вопрос
Сайт работает все нормально
Поставил туда это чудо http://forum.marzochi.ws/thread-139.html , и при выборке с помощью данного хака вот такая ерунда получается, в опере норм показывает, в мозиле глюк , на локалке все работало ок, перенес на хост и начались проблемы с кодировкой(((
Помогите разобраться с кодировкой

вот код хака для engine/engine.php

 } elseif ($do == 'xfsearch') {
            // ################ Поиск новостей по доп. полям #################            
            if ($cstart) {
                $cstart = $cstart - 1;
                $cstart = $cstart * $config['news_number'];
            }

            $newsmodule = true;

            $xf =  $_GET['xf'];

            if ( $config['charset'] == "utf-8" AND $config['charset'] != detect_encoding($xf) ) {
                $xf = iconv( "UTF-8", "utf-8//IGNORE", $xf );
            }

            if ( strpos($xf, "|") != False ) {
                $xfs = explode("|", $xf);
                $_xf = "";
                foreach( $xfs as $xfk => $xfv ) {
                    if (!empty($xfv)) {
                        $xfv = @$db->safesql ( htmlspecialchars ( strip_tags ( stripslashes ( trim ( $xfv ) ) ), ENT_QUOTES, $config['charset'] ) );
                        $_xf .= "xfields LIKE '%{$xfv}%' AND ";
                    }
                }
                $_xf = substr($_xf, 0, -4);

                $url_page = $config['http_home_url'] . "xfsearch/" . urlencode ( str_replace("'", "'", $_xf) );
                $user_query = "do=xfsearch&xf=" . urlencode ( str_replace("'", "'", $_xf) );

                $sql_select = "SELECT SQL_CALC_FOUND_ROWS p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE {$stop_list}{$_xf} AND approve=1" . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];
                $sql_count = "SELECT FOUND_ROWS() as count";
                $allow_active_news = true;

            } else {
                $xf = @$db->safesql ( htmlspecialchars ( strip_tags ( stripslashes ( trim ( $xf ) ) ), ENT_QUOTES, $config['charset'] ) );

                $url_page = $config['http_home_url'] . "xfsearch/" . urlencode ( str_replace("'", "'", $xf) );
                $user_query = "do=xfsearch&xf=" . urlencode ( str_replace("'", "'", $xf) );
            
                if (isset ( $_SESSION['dle_sort_xfsearch'] )) $news_sort_by = $_SESSION['dle_sort_xfsearch'];
                if (isset ( $_SESSION['dle_direction_xfsearch'] )) $news_direction_by = $_SESSION['dle_direction_xfsearch'];
                
                $sql_select = "SELECT SQL_CALC_FOUND_ROWS p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE {$stop_list}xfields LIKE '%{$xf}%' AND approve=1" . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];
                $sql_count = "SELECT FOUND_ROWS() as count";
                $allow_active_news = true;
            }
        
        } elseif ($subaction == 'userinfo') {



в сайт вставил
<div class="filtr">
<select id = "hroniki">
<option value = "">-- Выберите хроники --</option>
<option value = "Oath of Blood"> Oath of Blood </option>
<option value = "Interlude"> Interlude </option>
<option value = "The Kamael"> The Kamael </option>
<option value = "Hellbound"> Hellbound </option>
<option value = "Gracia"> Gracia </option>
<option value = "Freya"> Freya </option>
<option value = "High Five"> High Five </option>
<option value = "Goddess of Destruction"> Goddess of Destruction </option>
</select >
<br/><br/>
<select id = "reit">
<option value = "">-- Выберите рейт--</option>
<option value = "=x1"> =x1 </option>
<option value = "x2-x5"> x2-x5 </option>
<option value = "x6-x10"> x6-x10 </option>
<option value = "x11-x30"> x11-x30 </option>
<option value = "x31-x50"> x31-x50 </option>
<option value = "x51-x75"> x51-x75 </option>
<option value = "x76-x100"> x76-x100 </option>
<option value = "x101-x200"> x101-x200 </option>
<option value = "x201-x300"> x201-x300 </option>
<option value = "x301-x500"> x301-x500 </option>
<option value = "x501-x1000"> x501-x1000 </option>
<option value = "x1001-x1200"> x1001-x1200 </option>
<option value = "x1200-x5000"> x1200-x5000 </option>
<option value = "x5001-x10000"> x5001-x10000 </option>
<option value = "v10001"> выше 10001 </option>
</select>

<br/><br/>
<select id = "online">
<option value = "" >-- Выберите олайн --</option>
<option value = "11-100"> 11-100 </option>
<option value = "101-200"> 101-200 </option>
<option value = "201-300"> 201-300 </option>
<option value = "301-500"> 301-500 </option>
<option value = "501-800"> 501-800 </option>
<option value = "801-1000"> 801-1000 </option>
<option value = "1001-1500"> 1001-1500 </option>
<option value = "1501-2000"> 1501-2000 </option>
<option value = "2001-2500"> 2001-2500 </option>
<option value = "2501-3000"> 2501-3000 </option>
<option value = "3001-4000"> 3001-4000 </option>
<option value = "4001-5000"> 4001-5000 </option>
<option value = "5001-7000"> 5001-7000 </option>
<option value = "7001-10000"> 7001-10000 </option>
<option value = "Свыше 10000"> Свыше 10000 </option>
</select>
<br/>
<span class="filterhelp">Если фильтр при повторном выборе выдал тот же результат, значит по заданным Вами параметрам РЕЗУЛЬТАТОВ НЕТ</span>
<br/>

<script type="text/javascript">
                var hroniki = "";
                var reit = "";
                var online = "";
              
                function updatePage( term ) {
                    ShowLoading();
                    var url = "http://onwire.info?do=xfsearch&xf=" + (term.replace(/\s/g,'+'));
                    $('#dle-content').fadeOut(500, function() {
                        $('#dle-content').load( url + ' #dle-content', function() {
                            $('#dle-content').fadeIn(500);
                            HideLoading();
                        });
                    });
                    var pos = $("div[id=dle-content]").offset();
                    $("html").animate({scrollTop: pos.top}, 500);
                    return false;
                }
                function updateTerms( ) {
                    var search = [];
                    if (hroniki != "") search.push(hroniki);
                    if (reit != "") search.push(reit);
                    if (online != "") search.push(online);
                    
                    var term = search.join("|")
                    updatePage( term );
                    //$("#result").html(term);
                }
                
                $("#hroniki").change(function() { $("#hroniki option:selected").each(function () { hroniki = $(this).attr('value');updateTerms(); }); });
                $("#reit").change(function() { $("#reit option:selected").each(function () { reit = $(this).attr('value');updateTerms(); }); });
                $("#online").change(function() { $("#online option:selected").each(function () { online = $(this).attr('value');updateTerms(); }); });
                
                
            </script>
            
            <div id="result"></div>
        </div></ul>
                    <div class="clr"></div>



так как сайт в кодировке 1251 то в коде поменял
  if ( $config['charset'] == "utf-8" AND $config['charset'] != detect_encoding($xf) ) {
                $xf = iconv( "UTF-8", "utf-8//IGNORE", $xf );

на

if ( $config['charset'] == "windows-1251" AND $config['charset'] != detect_encoding($xf) ) {
                $xf = iconv( "UTF-8", "windows-1251//IGNORE", $xf );



но проблема осталась сайт чтобы посмотреть сайт

в базе везде сравнение cp1251_general_ci
сохранил базу и поменял все utf8 на cp1251 и все UTF-8 на windows-1251 потом снова загрузил базу на сервер, результата ноль, на локалке все ок

Ответил: helper


Проблему решил :)
Открыть .htaccess в корне и в начале сразу после DirectoryIndex index.php
Добавить:
AddDefaultCharset windows-1251

12 комментариев

jarrro
Юзер

jarrro - 2 августа 2013 23:58 -

У меня все норм показывает. Скорей всего кодировка в браузере другая. Поменяй кодировку в браузере на Windows-1251

sashok7062005
Юзер

sashok7062005 - 3 августа 2013 20:51 -

Видно я не до конца правильно сделал описание, нужно зайти в раздел раздел потом сделать выборку например как тут https://dle-faq.ru/uploads/comments/496/temp.jpg?r=1375546722 ну к примеру =х1 (чтобы была статья с таким значением) и тут лажа, и кеш чистил, в опере все гуд в мозиле - упс.(((( (сори за дублирование)

kpik2008
Юзер

kpik2008 - 3 августа 2013 01:39 -

Согласен с jarrro, во всех браузерах у меня нормально с кодировкой, почисти кеш, поставь автоопределение для кодировки и будет счастье!

sashok7062005
Юзер

sashok7062005 - 3 августа 2013 20:51 -

Видно я не до конца правильно сделал описание, нужно зайти в раздел раздел потом сделать выборку например как тут https://dle-faq.ru/uploads/comments/496/temp.jpg?r=1375546722 ну к примеру =х1 (чтобы была статья с таким значением) и тут лажа, и кеш чистил, в опере все гуд в мозиле - упс.((((

sashok7062005
Юзер

sashok7062005 - 3 августа 2013 20:21 -


Видно я не до конца правильно сделал описание, нужно зайти в раздел раздел потом сделать выборку например как тут https://dle-faq.ru/uploads/comments/496/temp.jpg?r=1375546722 ну к примеру =х1 (чтобы была статья с таким значением) и тут лажа, и кеш чистил, в опере все гуд в мозиле - упс.((((

jarrro
Юзер

jarrro - 3 августа 2013 21:52 -


да нет, все нормально, говорю же поменяй кодировку

helper
Юзер

helper - 5 августа 2013 19:40 -

Присоединяюсь, все криво идет через аякс!
sashok7062005, удалось решить проблему?

sashok7062005
Юзер

sashok7062005 - 6 августа 2013 13:01 -

Нет пока, если знаете решение дайте пожалуйста)

sashok7062005
Юзер

sashok7062005 - 6 августа 2013 14:31 -

нашел такое, но как его прикрутить сюда((((
В начале страницы
<meta http-equiv="content-type" content="text/html; charset=windows-1251" />

Перед отправкой запроса на сервер
XmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
XmlHttp.setRequestHeader("Accept-Charset", "windows-1251");
XmlHttp.send(encodeURI(req));

В начале страницы обрабатывающей запрос
header("Content-type: text/plain; charset=windows-1251");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);

Полученный запрос перекодируйте
while(list($key,$val) = each($_POST))
{
    $_POST[$key]=iconv("UTF-8","windows-1251",$val);
}

echo будет выводить уже в готовом виде windows 1251.

Если Вы используете MySQL, то сразу после соединения с базой, укажите кодировку данных в базе и какую вы хотите получить на выходе. Здесь предполагается, что везде windows 1251
mysql_query("SET character_set_client = cp1251");
mysql_query("SET collation_connection=cp1251_general_ci");
mysql_query("SET character_set_results = cp1251");


Так как сам в программировании полу ноль , слезно прошу Вас о помощи решить єту проблему)

helper
Юзер

helper - 6 августа 2013 20:35 -

Эта проблема решена.
Теперь может кто может мне помочь в моем вопросе https://dle-faq.ru/faq/phpquest/6304-formirovanie-zaprosa-v-polnoy-novosti.html

sashok7062005
Юзер

sashok7062005 - 6 августа 2013 21:04 -

Ура разобрался)))))))))))))), если кому будет нужно выкладываю как, сам игрался 3 дня надеялся на помощь "знающих ", им 3 минуты хватило бы, но увы, поэтому вылаживаю как решил, кстати классный хак, немного недороботанный, но чтото подобное в сети 40 баксов стоит, а тут бесплатно и просто, вообщем (у меня по русскому языку двойка, я не знаю, что в русском языке не существует слова вообщем) вот решение , все файлы оставил как в шапке вопроса поменял токо тут
<script type="text/javascript">


                var hroniki = "";
                var reit = "";
                var online = "";
              
                mysql_query("SET character_set_client = cp1251");
mysql_query("SET collation_connection=cp1251_general_ci");
mysql_query("SET character_set_results = cp1251");
                function updatePage( term ) {
                    ShowLoading();
                    var url = "http://onwire.info?do=xfsearch&xf=" + (term.replace(/\s/g,'+'));
                    $('#dle-content').fadeOut(500, function() {
                        $('#dle-content').load( url + ' #dle-content', function() {
                            $('#dle-content').fadeIn(500);
                            HideLoading();
                        });
                    });
                    var pos = $("div[id=dle-content]").offset();
                    $("html").animate({scrollTop: pos.top}, 500);
                    return false;
                }
                function updateTerms( ) {
                    var search = [];
                    if (hroniki != "") search.push(hroniki);
                    if (reit != "") search.push(reit);
                    if (online != "") search.push(online);
                    
                    var term = search.join("|")
                    updatePage( term );
                    //$("#result").html(term);
                }
                
                $("#hroniki").change(function() { $("#hroniki option:selected").each(function () { hroniki = $(this).attr('value');updateTerms(); }); });
                $("#reit").change(function() { $("#reit option:selected").each(function () { reit = $(this).attr('value');updateTerms(); }); });
                $("#online").change(function() { $("#online option:selected").each(function () { online = $(this).attr('value');updateTerms(); }); });
                
                
            </script>

и ура))))))) спасибо форумам)))), а куда вставить перепробовал путем подбора, может и не там, зато работает))))

sashok7062005
Юзер

sashok7062005 - 6 августа 2013 22:23 -

Да и способ описанный в ответе тоже помог, спасибо за помощь!)

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх