powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php & mysql & charset
10 сообщений из 10, страница 1 из 1
php & mysql & charset
    #38238826
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Искал, но не смог найти ответа :(

Ошибка - результат работы скрипта: "???"
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<?php
    	include('../cfg/config.php');
	$link = mysql_connect(ini_get("mysql.default_host"),
		ini_get("mysql.default_user"),
		ini_get("mysql.default_password")) or die('Cannot connect to the DB');
	mysql_select_db('hitchhi8', $link) or die('Cannot select the DB');
	// Не помогло :(
	mysql_set_charset("Windows-1251", $link);
	$sql = "SELECT.."
	$result = mysql_query($sql, $link) or die('Query error');
	$posts = array();
	if(mysql_num_rows($result)) {
		while($post = mysql_fetch_assoc($result)) {
			$posts[] = array('post'=>$post);
		}
	}
	$result = json_encode(array('posts'=>$posts));
	header("Content-type: text/plain");
	echo "Результат:".$result;
?>



Слово "Результат:" - отображается корректно, а вот данные из MySQL - ????
Таблица из которой производятся данные - cp1251
Сервер Web - Apache 2.0 (локальный Win32)
httpd.conf:
# For russian, more than one charset is used (depends on client, mostly):
AddCharset WINDOWS-1251 .cp-1251 .win-1251
AddCharset CP866 .cp866
AddCharset KOI8-r .koi8-r .koi8-ru
AddCharset KOI8-ru .koi8-uk .ua
AddCharset ISO-10646-UCS-2 .ucs2
AddCharset ISO-10646-UCS-4 .ucs4
AddCharset UTF-8 .utf8
AddDefaultCharset cp-1251

Результат скрипта смотрю через Firefox - кодировка WINDOWS-1251
Не знаю куда копать
...
Рейтинг: 0 / 0
php & mysql & charset
    #38238893
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LisichkinAddDefaultCharset cp-1251БЕЗ дефиса
...
Рейтинг: 0 / 0
php & mysql & charset
    #38238905
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не помогло :( - Сервис пере стартовал.
...
Рейтинг: 0 / 0
php & mysql & charset
    #38238957
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я теряю веру в человечество....
Данные одни и те-же. Скрипт один и тот же.
Хостинг hut4.ru:
Результат: "Результат:{"posts":[{"post":{"id":"1","uid":"1","type":"1","addressFrom":null...."
php 5.3.6
MySQL 5.1.57

Локальный компьютер:
Результат: "Результат:{"posts":[{"post":{"id":"1","uid":"1","type":"1","addressFrom":"??????"..."
php 5.2.17
MySQL 5.5.28

В поле "addressFrom" должно быть русское слово...
P.S. Через dbForge данные в MySQL одинаковы!
...
Рейтинг: 0 / 0
php & mysql & charset
    #38239035
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если проблема при чтении из базы, то перед или после mysql_select_db сделайте запрос
Код: php
1.
SET NAMES нужная_кодировка
...
Рейтинг: 0 / 0
php & mysql & charset
    #38240111
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To vkle Большое спасибо!
mysql_set_charset("cp1251", $link) - Исправило данные. Но далее столкнулся с еще одной проблеммой - json_encode - работает только с Utf
После долгих поисков...родился следующий вариант:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
<?php
	function convertCharset(&$array, $from, $to) {
   		foreach ($array as $key => $value) {
      		if(is_array($value))
         		convertCharset($array[$key], $from, $to);
      		else
      			$array[$key] = iconv($from, $to, $value);
   		}
	}

	function hex2str($hex) {
		$r = '';
		for ($i = 0; $i < strlen($hex) - 1; $i += 2)
			$r .= chr(hexdec($hex[$i] . $hex[$i + 1]));
		return $r;
	}

	header("Content-type: text/plain");
	include('../cfg/config.php');
	//////////////////////////////////////
	// Connect to Db
	$link = mysql_connect(ini_get("mysql.default_host"),
		ini_get("mysql.default_user"),
		ini_get("mysql.default_password")) or die('Cannot connect to DB');
	mysql_select_db($db_name, $link) or die('Cannot select DB');
	mysql_set_charset("cp1251", $link);
	mysql_query("SET NAMES cp1251", $link) or die('Cannot set charset');
	//////////////////////////////////////
	// Get sql query
	$routelist_sql = '../sql/routelist.sql';
	$sql = @fread(@fopen($routelist_sql, 'r'), @filesize($routelist_sql)) or die('Error reading sql file');
	//////////////////////////////////////
	// Query sql
	$result = mysql_query($sql, $link) or die('Query error');
	//////////////////////////////////////
	// Put query result to array
	$rows = array();
	$rows[] = mysql_num_rows($result);
	while($r = mysql_fetch_assoc($result)) {
		$rows[] = $r;
	}
	//////////////////////////////////////
	// Convert array cp1251 to utf8
	convertCharset($rows, 'windows-1251', 'utf-8');
	//////////////////////////////////////
	// Encode result to json
	$result = '{"response":'.json_encode($rows).'}';
	//////////////////////////////////////
	// Convert utf16 to cp1251
	$result = preg_replace('/\\\u([0-9A-F]{4})/sei', 'iconv("utf-16", "windows-1251", hex2str("$1"))', $result);
	echo $result;
?>


Прошу высказать свои соображения по по поду кода.
P.S. Предложения хранить данные в utf - не предлагать..
...
Рейтинг: 0 / 0
php & mysql & charset
    #38240115
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
переходи на utf-8. 21 век на дворе.
...
Рейтинг: 0 / 0
php & mysql & charset
    #38240133
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор 21 век на дворе.
А телевизор включишь - такое впечатление, что каменный век )
...
Рейтинг: 0 / 0
php & mysql & charset
    #38240193
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага, плазменный.
...
Рейтинг: 0 / 0
php & mysql & charset
    #38240199
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так я же про то, что там показывают
Крошка малахов, НТВ, настоящий мистический, с этими, как их там...экстрасексами :)
А сейчас по первому другое шоу идет - как его Шендерович, назвал "Крошка Цахес"
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php & mysql & charset
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]