Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> array и кодировка 
V
    Опции темы
MoLeX
Дата 30.9.2008, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Прива. есть массив (приведу маленькую часть, на самом деле он больше и кол-во вложенных массивов меняется)
Код

<?php
$utf = Array(0 => array(),
             1 => array("type" => array(0 => "type",
                                     1 => "&#1080&#1079&#1086&#1083&#1080&#1088&#1086&#1074&#1072&#1085&#1085&#1072&#1103",
                                     2 => "&#1082&#1086&#1084&#1084&#1091&#1085&#1072&#1083&#1082&#1072",
                                     3 => "&#1082&#1086&#1084&#1084&#1091&#1085&#1072&#1083&#1082&#1072")));
?>


так вот как преобразовать из utf в 1251 формат?!

P.S. пробывал через iconv, установил его но все равно ноль эмоций..




--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
skyboy
Дата 30.9.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



прежде чем преобразовывать кодировки, надо из html-кодов надо получить символы: буквы и цифры.

Добавлено через 3 минуты и 13 секунд
html_entity_decode
PM MAIL   Вверх
sTa1kEr
Дата 30.9.2008, 12:20 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



HTML сущности не совсем корректные, не хватает ';' после каждого символа, необходимо их откорректировать, либо использовать корректные.
А для декодирования HTML сущностей, как правильно сказал skyboy, используется функция html_entity_decode(), третий параметр у нее это как-раз необходимая кодировка.

Пример:
Код

function entity2win(&$string)
{
    $string = preg_replace('/&#\d+(?![\d;])/', '\0;', $string);
    $string = html_entity_decode($string, null, 'Windows-1251');
}

array_walk_recursive($utf, 'entity2win');
var_dump($utf);

PM MAIL   Вверх
MoLeX
Дата 30.9.2008, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



ерунда  smile 


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
skyboy
Дата 30.9.2008, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



MoLeX, можно немного информативнее?
PM MAIL   Вверх
MoLeX
Дата 30.9.2008, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



skyboy, да чето он ругается на ф-цию array_walk_recursive()

Цитата(ругательство)

Fatal error: Call to undefined function: array_walk_recursive() in ....\utf.php on line 12



--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
teroni
Дата 30.9.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 15.5.2007
Где: Днепропетровск

Репутация: 8
Всего: 22



Так для неё пхп 5 надо... 
PM MAIL   Вверх
MoLeX
Дата 30.9.2008, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Цитата(teroni @  30.9.2008,  13:36 Найти цитируемый пост)
Так для неё пхп 5 надо...  

да точно  
че то я совсем того smile

Добавлено через 1 минуту и 43 секунды
в догонку вопрос, а как можно модернизировать написанное sTa1kEr'ом что бы и в 4-рой работало.  


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
teroni
Дата 30.9.2008, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 15.5.2007
Где: Днепропетровск

Репутация: 8
Всего: 22



http://ua2.php.net/manual/ru/function.arra...rsive.php#59984

Вообще для многих функций пхп5 в комментах на пхп.нет есть замены для пхп4...
Хотя конечно лучше сразу писать под ту версию, которая у тебя на сервере.
PM MAIL   Вверх
skyboy
Дата 30.9.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



MoLeX, а ты не можешь сам написать функцию, которая бы обходила массив с подмассивами? это же совсем-совсем просто!
PM MAIL   Вверх
MoLeX
Дата 30.9.2008, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



skyboy, можно но тут опять цикл. а у меня их и так что то слишком много развелось)))


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
lukas
Дата 30.9.2008, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



Код

function utf2win($string){
    if (is_array($string)) return $string;
    if (function_exists('iconv'))
    return @iconv('UTF-8','windows-1251',$string);
    else {
    for ($c=0;$c<strlen($string);$c++){
        $i=ord($string[$c]);
        if ($i <= 127) @$out .= $string[$c];
        if (@$byte2){
            $new_c2=($c1&3)*64+($i&63);
            $new_c1=($c1>>2)&5;
            $new_i=$new_c1*256+$new_c2;
            if ($new_i==1025){
            $out_i=168;
            } else {
               if ($new_i==1105){
                $out_i=184;
            } else {
                $out_i=$new_i-848;
            }
            }
            @$out .= chr($out_i);
            $byte2 = false;
        }
        if (($i>>5)==6) {
            $c1 = $i;
            $byte2 = true;
        }
    }
    return $out;
    }
}



--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
sTa1kEr
Дата 1.10.2008, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(teroni @  30.9.2008,  14:36 Найти цитируемый пост)
Так для неё пхп 5 надо...  

Верно, раз версия PHP не была указана, я предположил, что используется PHP 5. А PHP 4 - это уже, имхо, такойже анахронизм, как и PHP 3. 

Для PHP 4 можно просто сделать рекурсию вручную. Получается примерно  тоже самое, вызов функции даже проще:
Код

function entity2win(&$value)
{
    if (is_array($value))
    {
        array_walk($value, 'entity2win');
    }
    else (is_string($value))
    {
        $value = preg_replace('/&#\d+(?![\d;])/', '\0;', $value);
        $value = html_entity_decode($value, null, 'Windows-1251');
    }
}

entity2win($utf);
var_dump($utf);


Это сообщение отредактировал(а) sTa1kEr - 1.10.2008, 08:51
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0616 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.