|
|
|
| В общем так. Написал чат на php/mysql/ajax
Работает так: текст, введенный в поле обрабатывается php-скриптом с помощью отправки запроса аяксом, там записывается в БД, затем этот же скрипт считыват из БД данные и возвращает их, а java-функция обрабатывает эти данные и динамически добавляет их на страницу.
Проблема с русским шрифтом - выводятся непонятные символы.
Кодировка - Windows-1251
Пробовал на UTF-8, не получилось
Как настроить и где чего прописать чтобы все нормально работало?
Нужно ли отдельно настраивать общую кодировку для php,js,mysql,html?
И если да, то каким образом?
Спасибо. | |
|
|
|
|
|
|
|
для: MRE
(23.06.2007 в 15:00)
| | нужно на всех страницах указать кодировку, и если происходит отдача параметров через аякс то
obj.setRequestHeader ('Content-Type', 'multipart/x-www-form-urlencoded; charset=windows-1251'); | |
|
|
|
|
|
|
|
для: bronenos
(23.06.2007 в 17:05)
| | на странице:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
в аяксе:
request.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=utf-8');
в Mysql:
mysql_query("SET NAMES UTF-8");
в начале php скрипта:
header("Charset: utf-8");
И все равно не работает. | |
|
|
|
|
|
|
|
для: MRE
(24.06.2007 в 12:56)
| | header ('Content-Type: text/html; charset=utf-8');
или text/html или text/plain, смотря что на странице - хтмл или текст | |
|
|
|
|
|
|
|
для: bronenos
(24.06.2007 в 13:10)
| | header('Content-Type: text/xml; charset=utf-8');
Не хочет, а может в mysql когда записываешь данные надо еще как-то обозначать кодировку в которой пишешь?
Потому что если залезть в БД напрямую (myadmin например), там тоже иероглифы. | |
|
|
|
|
|
|
|
для: MRE
(24.06.2007 в 13:36)
| | Помогите, уже все перепробовал ничего не выходит, я приведу куски моего кода:
..............
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
..............
|
..............
request.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=windows-1251');
request.send(param);
...............
|
ява код получает все нормально, алертом выводил - русские буквы нормально отображаются, видимо проблема в php скрипте который обрабатывает запрос, вот собственно он:
<?php
header('Content-Type: text/xml; charset=windows-1251');
session_start();
include("../inc/module/init.php");
include("../inc/module/db_class.php");
$db1 = new db();
if ($_POST['mes'])
{
$db1->query("SELECT * FROM users WHERE id='{$_SESSION['id']}'");
$row = $db1->fetch();
$d = date("Y-m-d H:i:s");
$mes = htmlspecialchars($_POST['mes']);
$db1->query("insert into chat values ('{$row['login']}','$mes','$d','0')");
}
......................
|
А это класс работы с БД:
<?php
class db
{
var $link;
var $result;
function db()
{
$this->link = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die(mysql_error());
mysql_select_db(DB_NAME) or die(mysql_error());
mysql_query("SET NAMES 'cp1251'");
mysql_query("SET CHARACTER SET cp1251");
}
......................
|
Инишка mysql:
[client]
port=3306
default-character-set=cp1251
[mysql]
default-character-set=cp1251
[mysqld]
port=3306
default-character-set=cp1251
character_set_server = cp1251
init-connect='SET NAMES cp1251'
basedir="C:/Programs/MySQL/MySQL Server 5.0/"
datadir="C:/Programs/MySQL/MySQL Server 5.0/Data/"
default-character-set=cp1251
................................
|
У кого какие соображения? | |
|
|
|
|
|
|
|
для: MRE
(24.06.2007 в 17:53)
| | > Потому что если залезть в БД напрямую (myadmin например), там тоже иероглифы
В данном случае, нужно отдавтаь данные с нормлаьной кодировкой. Не в ту степь смотрите. | |
|
|
|
|
|
|
|
для: mr Bin
(24.06.2007 в 18:00)
| | А можно поподробнее?
Что и как нужно сделать? | |
|
|
|
|
|
|
|
для: MRE
(23.06.2007 в 15:00)
| | У меня когда были такие же проблемы с sajax'ом помогла следующая функция:
function unicon($str, $to_uni = true) {
$cp = Array (
"А" => "А", "а" => "а",
"Б" => "Б", "б" => "б",
"В" => "В", "в" => "в",
"Г" => "Г", "г" => "г",
"Д" => "Д", "д" => "д",
"Е" => "Е", "е" => "е",
"Ё" => "Ё", "ё" => "ё",
"Ж" => "Ж", "ж" => "ж",
"З" => "З", "з" => "з",
"И" => "И", "и" => "и",
"Й" => "Й", "й" => "й",
"К" => "К", "к" => "к",
"Л" => "Л", "л" => "л",
"М" => "М", "м" => "м",
"Н" => "Н", "н" => "н",
"О" => "О", "о" => "о",
"П" => "П", "п" => "п",
"Р" => "Р", "р" => "р",
"С" => "С", "с" => "с",
"Т" => "Т", "т" => "т",
"У" => "У", "у" => "у",
"Ф" => "Ф", "ф" => "ф",
"Х" => "Х", "х" => "х",
"Ц" => "Ц", "ц" => "ц",
"Ч" => "Ч", "ч" => "ч",
"Ш" => "Ш", "ш" => "ш",
"Щ" => "Щ", "щ" => "щ",
"Ъ" => "Ъ", "ъ" => "ъ",
"Ы" => "Ы", "ы" => "ы",
"Ь" => "Ь", "ь" => "ь",
"Э" => "Э", "э" => "э",
"Ю" => "Ю", "ю" => "ю",
"Я" => "Я", "я" => "я"
);
if ($to_uni) {
$str = strtr($str, $cp);
} else {
foreach ($cp as $c) {
$cpp[$c] = array_search($c, $cp);
}
$str = strtr($str, $cpp);
}
return $str;
}
$u2koi = array
( "%u0430" => "а", "%u0410" => "А",
"%u0431" => "б", "%u0411" => "Б",
"%u0432" => "в", "%u0412" => "В",
"%u0433" => "г", "%u0413" => "Г",
"%u0434" => "д", "%u0414" => "Д",
"%u0435" => "е", "%u0415" => "Е",
"%u0451" => "ё", "%u0401" => "Ё",
"%u0436" => "ж", "%u0416" => "Ж",
"%u0437" => "з", "%u0417" => "З",
"%u0438" => "и", "%u0418" => "И",
"%u0439" => "й", "%u0419" => "Й",
"%u043A" => "к", "%u041A" => "К",
"%u043B" => "л", "%u041B" => "Л",
"%u043C" => "м", "%u041C" => "М",
"%u043D" => "н", "%u041D" => "Н",
"%u043E" => "о", "%u041E" => "О",
"%u043F" => "п", "%u041F" => "П",
"%u0440" => "р", "%u0420" => "Р",
"%u0441" => "с", "%u0421" => "С",
"%u0442" => "т", "%u0422" => "Т",
"%u0443" => "у", "%u0423" => "У",
"%u0444" => "ф", "%u0424" => "Ф",
"%u0445" => "х", "%u0425" => "Х",
"%u0446" => "ц", "%u0426" => "Ц",
"%u0447" => "ч", "%u0427" => "Ч",
"%u0448" => "ш", "%u0428" => "Ш",
"%u0449" => "щ", "%u0429" => "Щ",
"%u044A" => "ъ", "%u042A" => "Ъ",
"%u044B" => "ы", "%u042B" => "Ы",
"%u044C" => "ь", "%u042C" => "Ь",
"%u044D" => "э", "%u042D" => "Э",
"%u044E" => "ю", "%u042E" => "Ю",
"%u044F" => "я", "%u042F" => "Я",
"\r" => "",
"\n" => "<br />",
"\t" => ""
);
function utfencoderus(&$k,$v)
{ global $u2koi;
$k=unicon($k,false);
$k=strtr($k,$u2koi);
}
|
Здесь всё очень коряво, да и на названия функций --- koi... --- не обращайте внимания в какой водировке это сохраните, такая и будет, но всё же работает.
И когда в PHP вы получаете запрос с данными $args, то делаете:
array_walk_recursive($args,"utfencoderus")
И теперь args содержат нормальный русский текст (только помоему array_walk_recursive только с PHP5, если у вас старше, то надо как-то извращаться, но, я думаю, идея понятна)
И всё равно, на одном из хостингов у меня возникла проблема со знаком плюс, который превращался в пробел.
А при отправке данных обратно, Javaскрипту обработайте их с помощью unicon:
$esc_val = sajax_esc(unicon($value))
И перед отправкой данных из Javascript не забывайте применять к ним функцию escape | |
|
|
|
|
|
|
|
для: Osipov
(24.06.2007 в 18:56)
| | Разобрался, спасибо. | |
|
|
|
|