Проблемы с кодировкой ajax & MySQL

(Ответов: 7, Просмотров: 618)
  1. Новичок Аватар для iSerge
    • Регистрация: 17.10.2012
    • Сообщений: 25
    • Репутация: 1
    Приветствую всех!

    Столкнулся с проблемой кодировки и не знаю в каком месте проблема.
    Какие будут соображения?

    Есть БД MySQL в UTF-8,
    index.php

    Код HTML:
    <!DOCTYPE html> <html> <head> <title>price</title> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="style.css"> <script type="text/javascript"
    		src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"> </script> <script type="text/javascript">
    	$(function() {
    		$("#txtTitle").keyup(function() {
    			// получаем то, что написал пользователь
    			var searchString    = $("#txtTitle").val();
    			// формируем строку запроса
    			var data = 'query='+ searchString;
    			// если searchString не пустая
    			if(searchString) {
    				// делаем ajax запрос
    				$.ajax({
    					type: "POST",
    					url: "find_jQuery.php",
    					data: data,
    					// выполнится  до AJAX запроса
    					beforeSend: function(html) { 
    						$("#divResult").html('');
    						$("#search").show();
    						$("#span").html(searchString);
    				   },
    				   // выполнится после AJAX запроса
    				   success: function(html){ 
    						$("#divResult").show();
    						$("#divResult").append(html);
    				  }
    				});
    			}
    			return false;
    		});
    	});
    	</script> </head> <body> <br /> <div id="form"> <form method="post" action="find_jQuery.php" onsubmit="return false"> <div> <input id="txtTitle" type="text" placeholder="Введите запрос" /> <!--input type="submit" value="Поиск" class="search_button" /><br /--> </div><br /> </form> <div id="search">Результаты для <span id="span"></span>:</div> <div id="divResult"></div> </div> </body> </html>
    и find_jQuery.php:
    PHP код:
    <?php 
    include "bd_connect.php";  //Соединяемся с базой

    /*Обработка поискового запроса*/
    function search ($query) { 
      
    $text '';
      
    $usd_exchange 40;

      
    // Проводим фильтрацию данных
      
    $query trim($query); // Обрезаем пробелы и спецсимволы
      
    $query mysql_real_escape_string($query); // Фильтруем текст
      
    $query htmlspecialchars($query); // Переводим 

      //Поисковый запрос не пустой?
      
    if (!empty($query)){ 
        if (
    strlen($query) < 3) {
          
    $text '<p>короткий поисковый запрос.</p>';
        } elseif (
    strlen($query) > 128) {
          
    $text '<p>длинный поисковый запрос.</p>';
        } else {
          
    //Формируем строку поискового запроса 
          
    $sql "SELECT * FROM `Price` WHERE `Supplier` LIKE '%".preg_replace("# #msi""%' OR `Supplier` LIKE '%"$query)."%' OR `Collection` LIKE '%".preg_replace("# #msi""%' OR `Collection` LIKE '%"$query)."%' OR `Article` LIKE '%".preg_replace("# #msi""%' OR `Article` LIKE '%"$query)."%' OR `Pattern` LIKE '%".preg_replace("# #msi""%' OR `Pattern` LIKE '%"$query)."%'";
          
          
    // и выполняем его
          
    $result mysql_query($sql);
          
    //Если число совпадений (строк результата запроса) больше 0 
          
    if ( $num mysql_num_rows($result) > 0) { 
            
    //Получаем ассоциативный массив
            
    $row mysql_fetch_assoc($result); 
            
    //и начинаем формировать строку поисковой выдачи
            
            
    do {
              
    //Продолжаем  формировать строку поисковой выдачи
                
    $Price $row['Supplier Price']*2;
          
    $Unit $row['Unit'];

          if (
    $Unit == "RUB"){
            
    $Price ceil($Price/$usd_exchange);
            
    $Unit "USD";
          } 

                
    $text .= '<tr><td class="red">'.$Price.' '.$Unit.'</td><td>'.$row['Supplier'].'</td><td>'.$row['Collection'].'</td><td>'.$row['Article'].'</td><td>'.$row['Pattern'].'</td><td>'.$row['Page'].'</td><td>'.$row['Color'].'</td><td>'.$row['Length'].'</td><td>'.$row['Width/Height'].'</td><td>'.$row['Report'].'</td><td>'.$row['Vreport'].'</td><td>'.$row['Hreport'].'</td><td>'.$row['Composition'].'</td><td>'.$row['Country'].'</td><td>'.$row['Note'].'</td></tr>';
                
              
              
    // Делаем это пока у нас есть результаты                                            
            
    } while ($row mysql_fetch_assoc($result)); 
            
    // Выделяем поисковый запрос
            
    $bold '<span class="found">' $query '</span>';
            
    $text =  str_ireplace($query$bold$text);
          } else {
           
    // Найти совпадение не удалось 
           
    $text '<p>По вашему запросу ничего не найдено.</p>';
          }
        } 
      } else {
        
    $text '<p>Задан пустой поисковый запрос.</p>';
      }
      
    //Возвращаем сформированную строку поисковой выдачи
    ?>
        <div class="datagrid"><table>
            <thead><tr><th>Цена</th><th>Поставщик</th><th>Коллекция</th><th>Арт.</th><th>Паттерн</th><th>Стр.</th><th>Цвет</th><th>Длина</th><th>Выс./Шир.</th><th>Рапорт</th><th>Верт. Рапорт</th><th>Гор. Рапорт</th><th>Состав</th><th>Страна</th><th>Прим.</th></tr></thead>
                <tbody>    
                 <? return $text?>
                </tbody>
            </table>
        </div>

    <?


    if (isset (
    $_POST['query']) && !empty($_POST['query'])){ 

    // Открываем соединение с базой данных
    // и обращаемся к функции search()
    $search_result search ($_POST['query']); 
    echo 
    $search_result
    }
    ?>
    При вводе в инпут выдает строки с совпадениями из базы.
    Латиница отображается норм,а вместо киррилицы - вопросительные знаки (???????)
    • 0
  2. Дипломник
    • Регистрация: 29.11.2009
    • Сообщений: 131
    • Репутация: 32
    Если просто в скрипте выбрать данные и вставить на страницу (без аякса), то норм?
    Во вкладке network в файрбаге или инструментах разработчика посмотрите ответ сервера - что там - в самом теле ответа и в заголовке content-type сервера?
    • 0
  3. Новичок Аватар для iSerge
    • Регистрация: 17.10.2012
    • Сообщений: 25
    • Репутация: 1
    вот заголовки из файрбага

    Код:
    Remote Address:88.198.21.221:80
    Request URL:http://..../find_jQuery.php
    Request Method:POST
    Status Code:200 OK
    Request Headersview source
    Accept:*/*
    Accept-Encoding:gzip, deflate
    Accept-Language:en-US,en;q=0.8,ar;q=0.6,be;q=0.4,de;q=0.2,fr;q=0.2,it;q=0.2,ru;q=0.2
    Connection:keep-alive
    Content-Length:12
    Content-Type:application/x-www-form-urlencoded; charset=UTF-8
    Host:...
    Origin:...
    Referer:....
    User-Agent:Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36
    X-Requested-With:XMLHttpRequest
    Form Dataview sourceview URL encoded
    query:14518 
    Response Headersview source
    Connection:keep-alive
    Content-Type:text/html
    Date:Mon, 01 Dec 2014 11:25:02 GMT
    Server:nginx
    Transfer-Encoding:chunked
    Что можно по ним понять?

    А без аякса что-то у меня совсем ничего не работает, пока не понимаю почему(
    • 0
  4. Студент Аватар для Lacoste
    • Регистрация: 10.10.2014
    • Сообщений: 86
    • Репутация: 5
    В find_jQuery.php самой первой строкой задайте <?php header('Content-Type: text/html; charset=utf-8'); ?> или
    <?php header("Content-type: text/plain; charset=windows-1251"); ?> В зависимости от кодировки основной страницы
    • 0
  5. Новичок Аватар для iSerge
    • Регистрация: 17.10.2012
    • Сообщений: 25
    • Репутация: 1
    Lacoste, у меня основная страница в utf-8.
    Прописывал find_jQuery.php <?php header('Content-Type: text/html; charset=utf-8'); ?>
    и <?php header("Content-type: text/plain; charset=windows-1251"); ?> поменяв основную в windows-1251

    Ничего не изменилось, траблы с кодировкой остались.

    Может это надо копать в POST запросах ajax?
    • 0
  6. Дипломник Аватар для Tiefe
    • Регистрация: 17.12.2012
    • Сообщений: 120
    • Репутация: 18
    Попробуйте после соединения с БД, добавить такой код:
    PHP код:
    mysql_query("SET NAMES 'utf8'"); 
    • 1

    Спасибо сказали:

    iSerge(02.12.2014),
  7. Студент Аватар для parserrf
    • Регистрация: 03.03.2012
    • Сообщений: 89
    • Репутация: 20
    • Webmoney BL: ?
    или так
    mysql_query("set character_set_client ='utf8'");
    mysql_query("set character_set_results ='utf8'");
    mysql_query("set collation_connection ='utf8_general_ci'");
    • 0
  8. Новичок Аватар для iSerge
    • Регистрация: 17.10.2012
    • Сообщений: 25
    • Репутация: 1
    Tiefe, ЗАРАБОТАЛО) после добавления mysql_query("SET NAMES 'utf8'");

    Спасибо, плюсанул в карму)
    • 0

Похожие темы

Темы Раздел Ответов Последний пост
Скрипты (php, ajax, mysql). Ищу НЕнормального программиста!
Другая работа 0 16.03.2013 15:55
Проблемы с кодировкой при подключении модулей
Joomla 1 04.01.2013 00:51
Скрипт комментариев CommentIt Ajax (Mysql + Без mysql)
Софт, скрипты, лицензии 0 01.07.2012 00:59
Веб разработки на Php, MySQL, Ajax.
Создание сайтов 1 13.01.2011 04:43

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры