Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2014, 20:52   #1
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию Отображение кирилицы

пробовал записывать в Mysql кирилицу через php MyAdmin и через скрипт php, менял кодировку в mysql с utf8_general_ci и 1251.
Считываю данные с MySql скриптом php и кодирую в json для отправки клиенту.
В ответе у клиента вместо кириллицы null. ( в самом MySql кириллица отображается)
Притом за два дня до этого в другой таблице при отображении данных в html из запроса php по Mysql была кириллица.
Используется Mysql 5.5.25 PHP/5.3.13 запросы из php через mysqli

Что может быть не так?

Код:
function zapros()
				{
					 $.ajax({url:"newMsgs22_map_4_.php", 
					 data:{ },
				        success:function(result){
					s_1_name=JSON.parse (result)[16][2];
									document.test.input_text1.value=s_1_name;
									}
							  });
				
						   }
php:
Код:
<?php

 $host="";
    $user="root2";
    $pass="root"; //установленный вами пароль
    $db_name="mybd2";
    //$link=mysql_connect($host,$user,$pass);
	$link = mysqli_connect($host, $user, $pass, $db_name);
	//"set names cp1251"
	/*
$result=mysql_query ("set character_set_client='cp1251'"); 
$result=mysql_query ("set character_set_results='cp1251'"); 
$result=mysql_query ("set collation_connection='cp1251_general_ci'"); 
$result=mysql_set_charset('cp1251_general_ci');
*/
$result = mysqli_query($link, 'SELECT `name_sector`, `s_1_name`, `s_1_coord_x`, `s_1_coord_y`, `s_1_zaxvat_1`, `s_1_zaxvat_2`,
 `s_2_name`, `s_2_coord_x`, `s_2_coord_y`, `s_2_zaxvat_1`, `s_2_zaxvat_2`,
 `s_3_name`, `s_3_coord_x`, `s_3_coord_y`, `s_3_zaxvat_1`, `s_3_zaxvat_2`,
 `s_4_name`, `s_4_coord_x`, `s_4_coord_y`, `s_4_zaxvat_1`, `s_4_zaxvat_2`,
 `s_5_name`, `s_5_coord_x`, `s_5_coord_y`, `s_5_zaxvat_1`, `s_5_zaxvat_2` FROM `universal` WHERE 1');
    /* Выборка результатов запроса */ $k=0;
    while( $row = mysqli_fetch_assoc($result) ){ 
	

	
		$t[0][$k]=$row['name_sector'];
		$t[1][$k]=$row['s_1_name'];
		$t[2][$k]=$row['s_1_coord_x'];
		$t[3][$k]=$row['s_1_coord_y'];
		$t[4][$k]=$row['s_1_zaxvat_1'];
		$t[5][$k]=$row['s_1_zaxvat_2'];
		$t[6][$k]=$row['s_2_name'];
		$t[7][$k]=$row['s_2_coord_x'];
		$t[8][$k]=$row['s_2_coord_y'];
		$t[9][$k]=$row['s_2_zaxvat_1'];
		$t[10][$k]=$row['s_2_zaxvat_2'];
		$t[11][$k]=$row['s_3_name'];
		$t[12][$k]=$row['s_3_coord_x'];
		$t[13][$k]=$row['s_3_coord_y'];
		$t[14][$k]=$row['s_3_zaxvat_1'];
	        $t[15][$k]=$row['s_3_zaxvat_2'];
		$t[16][$k]=$row['s_4_name'];
		$t[17][$k]=$row['s_4_coord_x'];
		$t[18][$k]=$row['s_4_coord_y'];
		$t[19][$k]=$row['s_4_zaxvat_1'];
		$t[20][$k]=$row['s_4_zaxvat_2'];
		$k=$k+1;
    } 
$t= json_encode($t);//обратно закодировали в Json
echo $t;
?>
Если [16][2] записана кириллица то в firebag firefox :
Код:
[["Zondur","Xisha","Mergec"],["Vakhar","Pxedok","Xamal"],["35","235","35"],["35","25","225"],["3","2","1"],["1","6","6"],
["Atlan","Arc","Rastarban"],["105","315","135"],["55","45","185"],["6","2","1"],["1","2","6"],["Rigel","Altair","Eiron"],
["125","345","145"],["95","135","235"],["6","2","1"],["1","6","6"],[null,"altair","Arctur"],
["55","205","105"],["125","125","265"],["1","2","1"],["3","6","6"]]
Если поменять на латинский null соответственно в латинке норм

Последний раз редактировалось Illusiony; 05.03.2014 в 22:38.
Illusiony вне форума Ответить с цитированием
Старый 05.03.2014, 21:24   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

все что угодно, телепатов нема
если null возвращает - это косяк запроса или скрипта, кириллица тут не причем

Последний раз редактировалось ADSoft; 05.03.2014 в 21:28.
ADSoft вне форума Ответить с цитированием
Старый 05.03.2014, 21:31   #3
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Кириллица как раз тут причем, так как если поменять значение на латинский язык все норм
Illusiony вне форума Ответить с цитированием
Старый 05.03.2014, 21:50   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Пора уже код показать, отладкой заняться – чего гадать вслепую?
Andkorol вне форума Ответить с цитированием
Старый 05.03.2014, 23:01   #5
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Показал код.
Illusiony вне форума Ответить с цитированием
Старый 05.03.2014, 23:21   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Займись отладкой – определи, на каком этапе данные переходят в null.
Если они в таком виде приходят из БД – тогда нужно пробовать указать кодировку (mysqli_set_charset).
Если они становятся null после обработки json_encode – то здесь нужно учитывать этот момент:
Цитата:
Функция работает только с кодированными в UTF-8 данными.
Andkorol вне форума Ответить с цитированием
Старый 06.03.2014, 07:33   #7
vasiatka
Пользователь
 
Аватар для vasiatka
 
Регистрация: 18.02.2014
Сообщений: 90
По умолчанию

Дамп для таблиц еще покажи. Только данных не надо.
В бинарной системе счет ведут не по пальцам, а по кулакам.
Пенза - мой город - я из Пензы.
vasiatka вне форума Ответить с цитированием
Старый 06.03.2014, 18:57   #8
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Дамп таблицы без данных:
Код:
-- phpMyAdmin SQL Dump
-- version 3.5.1
-- http://www.phpmyadmin.net
--
-- Хост: 127.0.0.1
-- Время создания: Мар 06 2014 г., 18:52
-- Версия сервера: 5.5.25
-- Версия PHP: 5.3.13

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- База данных: `mybd2`
--

-- --------------------------------------------------------

--
-- Структура таблицы `universal`
--

CREATE TABLE IF NOT EXISTS `universal` (
  `name_sector` varchar(10) NOT NULL,
  `s_1_name` varchar(10) DEFAULT NULL,
  `s_1_coord_x` int(4) DEFAULT NULL,
  `s_1_coord_y` int(4) DEFAULT NULL,
  `s_1_zaxvat_1` int(1) DEFAULT NULL,
  `s_1_zaxvat_2` int(1) DEFAULT NULL,
  `s_2_name` varchar(10) DEFAULT NULL,
  `s_2_coord_x` int(4) DEFAULT NULL,
  `s_2_coord_y` int(4) DEFAULT NULL,
  `s_2_zaxvat_1` int(1) DEFAULT NULL,
  `s_2_zaxvat_2` int(1) DEFAULT NULL,
  `s_3_name` varchar(10) DEFAULT NULL,
  `s_3_coord_x` int(4) DEFAULT NULL,
  `s_3_coord_y` int(4) DEFAULT NULL,
  `s_3_zaxvat_1` int(1) DEFAULT NULL,
  `s_3_zaxvat_2` int(1) DEFAULT NULL,
  `s_4_name` varchar(10) DEFAULT NULL,
  `s_4_coord_x` int(4) DEFAULT NULL,
  `s_4_coord_y` int(4) DEFAULT NULL,
  `s_4_zaxvat_1` int(1) DEFAULT NULL,
  `s_4_zaxvat_2` int(1) DEFAULT NULL,
  `s_5_name` varchar(10) DEFAULT NULL,
  `s_5_coord_x` int(4) DEFAULT NULL,
  `s_5_coord_y` int(4) DEFAULT NULL,
  `s_5_zaxvat_1` int(1) DEFAULT NULL,
  `s_5_zaxvat_2` int(1) DEFAULT NULL,
  PRIMARY KEY (`name_sector`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `universal`
--

INSERT INTO `universal` (`name_sector`, `s_1_name`, `s_1_coord_x`, `s_1_coord_y`, `s_1_zaxvat_1`, `s_1_zaxvat_2`, `s_2_name`, `s_2_coord_x`, `s_2_coord_y`, `s_2_zaxvat_1`, `s_2_zaxvat_2`, `s_3_name`, `s_3_coord_x`, `s_3_coord_y`, `s_3_zaxvat_1`, `s_3_zaxvat_2`, `s_4_name`, `s_4_coord_x`, `s_4_coord_y`, `s_4_zaxvat_1`, `s_4_zaxvat_2`, `s_5_name`, `s_5_coord_x`, `s_5_coord_y`, `s_5_zaxvat_1`, `s_5_zaxvat_2`)

/* Данные*/

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Illusiony вне форума Ответить с цитированием
Старый 06.03.2014, 19:17   #9
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Ну а результаты отладки кода?
Andkorol вне форума Ответить с цитированием
Старый 12.03.2014, 19:23   #10
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Запускаю с php без использования json выдает нормально кириллицу.
Значит json не понимает кодировку.
Как избежать таких последствий?

Andkorol Вы пишите что json работает только c кодированными в UTF-8 данными.
Но у таблицы как раз utf8_general_ci.
Что я не так делаю?
Или нужна utf8_unicode_ci? ( проверил бесполезно)

Сделал вот что:
-до преобразования в json и отправки конкретно для кириллического значения
$t[16][2]=iconv('CP1251','UTF-8', $t[16][2]);
В и тоге отобразилось нормально в html

Получается что Php сам кодирует полученные данные в 1251? ( хотя в этом случае весь текст был бы null)

Как решить проблему красиво и все таки ии-за чего так происходит?

Узнал что текущая внутренняя кодировка php ISO-8859-1 , но толку от этого....

Нашел в DENWER \WebServers\usr\local\apache\conf\h ttpd.conf смени AddDefaultCharset windows-1251
заменил на AddDefaultCharset UTF-8

Итог все крякозяблами, а кириллица все также null

Последний раз редактировалось Illusiony; 12.03.2014 в 20:27.
Illusiony вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с отображением кирилицы в текстовом редакторе Pein95 HTML и CSS 1 22.06.2012 02:24
Вывод кирилицы Oleg34 Помощь студентам 1 14.01.2012 17:29
Windows XP чтение кирилицы @@@KpecT@@@ Помощь студентам 0 02.03.2011 18:45
Проблемы с отображением кирилицы в Memo VHomer Компоненты Delphi 12 07.12.2010 20:18
Windows 7 некорректное отображение кирилицы Stilet Windows 6 07.05.2009 13:31