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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: iconv обрезает текст
 
 автор: Qiao   (13.07.2009 в 13:55)   письмо автору
8 байт
 
 

Прикреплённый файл находится в кодировке GB2312 и имеет структуру: верх, чёрточка, низ. После конвертирования в UTF низ и сама чёрточка исчезают. От верха и низа это не зависит.

Вот скрипт:

<?php
$html 
file_get_contents("1.txt");
echo 
$html;
$html iconv("GB2312","utf-8",$html);
echo 
"\n\n".$html;
?>


Что это за фокус? Если в браузере или текстовом редакторе менять кодировку, то всё нормально - текст искажается (или конвертируется), но никуда не исчезает.
Получается это php обрезает текст?

  Ответить  
 
 автор: Trianon   (13.07.2009 в 14:08)   письмо автору
 
   для: Qiao   (13.07.2009 в 13:55)
 

$html = "\x78\x0D\x0A\xA8\x44\x0D\x0A\x78";
Вообще-то там нотайс вылезает при конвертировании.
Notice: iconv() [function.iconv]: Detected an illegal character in input string in Z:\home\localhost\www\Tests\tmp\temp2.php on line 4

по-моему iconv Вам не требуется.

Кроме того GB2312 - китайская кодировка,
наивно ожидать что соответствующая шрифтовая поддержка установлена на компьютерах форумчан.

  Ответить  
 
 автор: Qiao   (13.07.2009 в 14:32)   письмо автору
 
   для: Trianon   (13.07.2009 в 14:08)
 

Странно, у меня нотайс не вылазет.

Не понял что вы имеете ввиду "iconv Вам не требуется"?
В том-то и дело, что нужно (можно, кончено руками, но так неинтересно). Я конвертил и вдруг пошли сбои.

То есть проблема в этой чёрточке (как и ожидалось). А что в ней такого, и главное, есть ли способ как-то её обойти?
Если я захочу её удалить, например регулярными, то мне специально для этого нужно файл с этой регуляркой в GB2312 держать? Можно её как-нибуль из под UTF удалить?

  Ответить  
 
 автор: Trianon   (13.07.2009 в 14:40)   письмо автору
 
   для: Qiao   (13.07.2009 в 14:32)
 

>Странно, у меня нотайс не вылазет.
Так наверное у Вас он пропросту заблокирован.

>Не понял что вы имеете ввиду "iconv Вам не требуется"?
>В том-то и дело, что нужно (можно, кончено руками, но так неинтересно). Я конвертил и вдруг пошли сбои.

>То есть проблема в этой чёрточке (как и ожидалось). А что в ней такого, и главное, есть ли способ как-то её обойти?

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

>Можно её как-нибуль из под UTF удалить?

А почему нет, собственно?
preg_replace работает с utf8

  Ответить  
 
 автор: sim5   (13.07.2009 в 14:42)   письмо автору
 
   для: Qiao   (13.07.2009 в 14:32)
 

string iconv ( string $in_charset, string $out_charset, string $str )

Если добавить //TRANSLIT к параметру out_charset будет включена транслитеризация. Это означает, что вслучае, когда символа нет в конечной кодировке, он заменяется одним или несколькими аналогами. Если добавить //IGNORE, то символы, которых нет в конечной кодировке, будут опущены. Иначе, будет возвращена строка str, обрезанная до первого недопустимого символа.

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

  Ответить  
 
 автор: Qiao   (13.07.2009 в 15:04)   письмо автору
 
   для: sim5   (13.07.2009 в 14:42)
 

>Вы юникодовский номер этого символа назвать можете?
Не могу, так как она к юникоду просто не конвертится.
На вид обычное широкое тире: "&#8213;".

//IGNORE помог, спасибо. Ответ заключался в rtfm.

  Ответить  
 
 автор: Trianon   (13.07.2009 в 16:26)   письмо автору
 
   для: Qiao   (13.07.2009 в 15:04)
 

ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP936.TXT

0xA844 0x2015 #HORIZONTAL BAR

  Ответить  
 
 автор: Qiao   (13.07.2009 в 18:04)   письмо автору
 
   для: Trianon   (13.07.2009 в 16:26)
 

При чём тут MICSFT? Это что - проприетарный знак?

  Ответить  
 
 автор: Trianon   (13.07.2009 в 18:06)   письмо автору
 
   для: Qiao   (13.07.2009 в 18:04)
 

Можете найти определение этого Вашего A8 44 почище - вперед.
Я нашел хотя бы такое.

  Ответить  
Rambler's Top100
вверх

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