Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Проблемка с кодировками

Сообщения:  [1-10] 

 
 автор: MRE   (25.06.2007 в 12:12)   письмо автору
 
   для: Osipov   (24.06.2007 в 18:56)
 

Разобрался, спасибо.

   
 
 автор: Osipov   (24.06.2007 в 18:56)   письмо автору
 
   для: 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

   
 
 автор: MRE   (24.06.2007 в 18:07)   письмо автору
 
   для: mr Bin   (24.06.2007 в 18:00)
 

А можно поподробнее?
Что и как нужно сделать?

   
 
 автор: mr Bin   (24.06.2007 в 18:00)   письмо автору
 
   для: MRE   (24.06.2007 в 17:53)
 

> Потому что если залезть в БД напрямую (myadmin например), там тоже иероглифы

В данном случае, нужно отдавтаь данные с нормлаьной кодировкой. Не в ту степь смотрите.

   
 
 автор: MRE   (24.06.2007 в 17:53)   письмо автору
 
   для: 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_HOSTDB_USERDB_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 в 13:36)   письмо автору
 
   для: bronenos   (24.06.2007 в 13:10)
 

header('Content-Type: text/xml; charset=utf-8');

Не хочет, а может в mysql когда записываешь данные надо еще как-то обозначать кодировку в которой пишешь?
Потому что если залезть в БД напрямую (myadmin например), там тоже иероглифы.

   
 
 автор: bronenos   (24.06.2007 в 13:10)   письмо автору
 
   для: MRE   (24.06.2007 в 12:56)
 

header ('Content-Type: text/html; charset=utf-8');
или text/html или text/plain, смотря что на странице - хтмл или текст

   
 
 автор: MRE   (24.06.2007 в 12:56)   письмо автору
 
   для: 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");

И все равно не работает.

   
 
 автор: bronenos   (23.06.2007 в 17:05)   письмо автору
 
   для: MRE   (23.06.2007 в 15:00)
 

нужно на всех страницах указать кодировку, и если происходит отдача параметров через аякс то
obj.setRequestHeader ('Content-Type', 'multipart/x-www-form-urlencoded; charset=windows-1251');

   
 
 автор: MRE   (23.06.2007 в 15:00)   письмо автору
 
 

В общем так. Написал чат на php/mysql/ajax
Работает так: текст, введенный в поле обрабатывается php-скриптом с помощью отправки запроса аяксом, там записывается в БД, затем этот же скрипт считыват из БД данные и возвращает их, а java-функция обрабатывает эти данные и динамически добавляет их на страницу.
Проблема с русским шрифтом - выводятся непонятные символы.
Кодировка - Windows-1251
Пробовал на UTF-8, не получилось
Как настроить и где чего прописать чтобы все нормально работало?
Нужно ли отдельно настраивать общую кодировку для php,js,mysql,html?
И если да, то каким образом?
Спасибо.

   

Сообщения:  [1-10] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования