Есть ли в PHP ф-ция перекодировки из html в текст

knyazev

Новичок
Есть ли в PHP ф-ция перекодировки из html в текст

При считывании Exсel Explorer кодирует текстовые поля в html-символы.

$data = $ee->AsHTML($data);
Если убрать эту строку выводит какую-то охинею.

Отсюда вопрос:
Как перекодировать html-символы обратно в текст.

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

Нечто

Психолог РНРClub
Функция есть.
Все вопросы по существованию функций стоит задавать по адресу: http://php.net
 

SiMM

Новичок
> Если убрать эту строку выводит какую-то охинею.
Это не ахинея. А, насколько понимаю, UTF-16LE.
[m]iconv[/m]
 

knyazev

Новичок
Автор оригинала: Мутник
может примерчик выложишь?
Вот эта ф-ция, которая переводит в html-символы. Может кто поможет в ней разобраться, и может здесь что-нибудь изменить.

function AsHTML($data) {
if( is_string($data) ) {
if( ord($data[0])==0 ) {
return htmlspecialchars(substr($data,1));
} else {
$s = '';
for( $c=1; $c<strlen($data); $c+=2 ) {
$l = ord($data[$c]);
$h = ord($data[$c+1]);
if( ($h>0) || ($l<32) ) {
$s .= '&#'.(256*$h+$l).';';
} else {
$s .= htmlspecialchars($data[$c]);
}
}
return $s;
}
} else {
return $data;
}
}

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

Это не ахинея. А, насколько понимаю, UTF-16LE.
Выводит что-то типа:
C18:L=8:8 2@C1=K5//
 

SiMM

Новичок
> Может кто поможет в ней разобраться
А чего в ней разбираться? Переводит UTF-16LE/ASCII в HTML-кодированный вид (как назвать правильно - не знаю, ибо html-entities - это, наверно, всё же чуточку другое).

> Выводит что-то типа: C18:L=8:8 2@C1=K5//
Не верю (C) Станиславский.

Если и приводить такие вещи в форуме - то только как результат вывода их после
PHP:
function dump($str){
  return substr(preg_replace('#.#se','sprintf("%02x ",ord("$0"))',$str),0,-1);
}

dump($data);
 

knyazev

Новичок
Автор оригинала: SiMM

> Выводит что-то типа: C18:L=8:8 2@C1=K5//
Не верю (C) Станиславский.
Есть такая вещь как клавиатура. При копировании того, что получилось не вставляется. Вот и решил клавиатуру использовать. ;)


Ну так что кто-нибудь поможет?
 

SiMM

Новичок
> Есть такая вещь как клавиатура. При копировании того, что получилось не вставляется.
А мне ты зачем об этом рассказываешь?

> Вот и решил клавиатуру использовать.
Т.е. ты приводишь текст абсолютно от балды и ждёшь какой-то помощи, после того, как она тебе уже давно была дана?

> Ну так что кто-нибудь поможет?
Спасение утопающих - дело рук самих утопающих. Особенно если брошенный спасательный круг они напрочь игнорируют.
 

knyazev

Новичок
Автор оригинала: SiMM
> Есть такая вещь как клавиатура. При копировании того, что получилось не вставляется.
А мне ты зачем об этом рассказываешь?
Ну ты же не веришь

Автор оригинала: SiMM
> Вот и решил клавиатуру использовать.
Т.е. ты приводишь текст абсолютно от балды и ждёшь какой-то помощи, после того, как она тебе уже давно была дана?
От какой балды?

Если я не использую ф-цию AsHTML($data), то браузер выводит следующие символы C18:L=8:8 2@C1=K5// (при копировании из браузера эти символы не вставляются, поэтому я использовал клавиатуру и точно привел список символов, которые он мне вывел).

Если я такой глупенький, подскажи пожалуйста еще раз, как мне в переменную получить обычный текст, а не набор символов.

Я пишу:
$data=iconv_get_encoding($data);

Но после этого вообще ничего не выводится.

Автор оригинала: SiMM
> Ну так что кто-нибудь поможет?
Спасение утопающих - дело рук самих утопающих. Особенно если брошенный спасательный круг они напрочь игнорируют.
Спасибо!
 

SiMM

Новичок
> то браузер выводит следующие символы C18:L=8:8 2@C1=K5// (при копировании из браузера эти символы не вставляются, поэтому я использовал клавиатуру и точно привел список символов, которые он мне вывел).
Я уже написал, как нужно приводить такие вещи в форуме.

> подскажи пожалуйста еще раз, как мне в переменную получить обычный текст, а не набор символов
[m]iconv[/m]

> Я пишу: $data=iconv_get_encoding($data);
> Но после этого вообще ничего не выводится.
А должно?
 

knyazev

Новичок
должно.

Так никто и не смог помочь. :(

А я думал из html-символов легко будет перекодировать в обычный текст.
 

SiMM

Новичок
> должно.
Кому и что? Я не понимаю, накой ляд пользовать функцию, даже не понимая, что она делает? Прочитали бы хоть ман по ней для начала. Я же вам даже кодировку подсказал - ну посмотрите вы на вышеприведённую функцию - неужели сложно понять, что первый байт - тип используемой кодировки, далее - данные. Либо в ASCII, либо в UTF-16LE

> Так никто и не смог помочь.
Думать за вас никто не будет - вас пнули в нужном направлении - а вы даже пошевелиться не подумали. Где результат выполнения данных выше указаний?

> А я думал из html-символов легко будет перекодировать в обычный текст.
А зачем? Зачем это делать из HTML-символов, когда это можно делать напрямую?

> html_entity_decode попробуй все-таки
Кстати, да - но как я уже писал выше - через ж.
PHP:
function AsCP1251($data){
  if ( !is_string($data) ) return $data;
  if ( ord($data[0]) )
       return iconv('UTF-16LE','CP1251',substr($data,1));
  else return substr($data,1);
}
PS: тунеядцы, млин...
 

knyazev

Новичок
Автор оригинала: SiMM
> должно.
Кому и что? Я не понимаю, накой ляд пользовать функцию, даже не понимая, что она делает? Прочитали бы хоть ман по ней для начала. Я же вам даже кодировку подсказал - ну посмотрите вы на вышеприведённую функцию - неужели сложно понять, что первый байт - тип используемой кодировки, далее - данные. Либо в ASCII, либо в UTF-16LE

> Так никто и не смог помочь.
Думать за вас никто не будет - вас пнули в нужном направлении - а вы даже пошевелиться не подумали. Где результат выполнения данных выше указаний?

> А я думал из html-символов легко будет перекодировать в обычный текст.
А зачем? Зачем это делать из HTML-символов, когда это можно делать напрямую?

> html_entity_decode попробуй все-таки
Кстати, да - но как я уже писал выше - через ж.
PHP:
function AsCP1251($data){
  if ( !is_string($data) ) return $data;
  if ( ord($data[0]) )
       return iconv('UTF-16LE','CP1251',substr($data,1));
  else return substr($data,1);
}
PS: тунеядцы, млин...
У меня не работает...


Но я сам разобрался:
PHP:
        function AsHTML($data) {
                if( is_string($data) ) {
                        if( ord($data[0])==0 ) {
                                return substr($data,1);
                        } else {
                                $s = '';
                                for( $c=1; $c<strlen($data); $c+=2 ) {
                                 $l = ord($data[$c]);
                                 $h = ord($data[$c+1]);
                               
                                 if( ($h>0) || ($l<32) ) {
                                         $s .= chr($l+176);
                                 } else {
                                        $s .= $data[$c];
                                 }
                                }
                                return $s;
                        }
                } else {
                        return $data;
                }
        }
Все работает, ураааа!!! :D

Всем спасибо за помощь!!! ;)
 
Сверху