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

Форум PHP

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

 

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

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

тема: xml и иврит
 
 автор: dima_mak   (26.07.2009 в 13:09)   письмо автору
 
 

есть база данных с полями на иврите, в них текст примерно такой

"&#1502 ;&#1493 ;&#1510 ;&#1500 ;&#1495 ;ת"

специально сделал пробел между числом и точкой с запятой.
пытаюсь вывести таблицу в ХМЛ а получается, что после

    $productdetails=$doc->createElement("DETAILS");
    $product=$doc->appendChild($productdetails);
    $text = $doc->createTextNode($arr[descr]);
    $productdetails->appendChild($text);

в теге "DETAILS" текст отображаеться как есть (цифрами и тд.), если открываю исходный код страницы то вижу, что все & заменены на &
как это исправить?

  Ответить  
 
 автор: Жмурик   (26.07.2009 в 15:28)   письмо автору
 
   для: dima_mak   (26.07.2009 в 13:09)
 

Как запретить appendChild'у это я не знаю, пончиков больше нет гг Зато советую переходить на UTF-8
Я тебе даже код дам, ибо unicode2utf8 писал не я гг

function unicode2utf8($c)
{
    if($c < 0x80)
    {
        return chr($c);
    }
    else if($c < 0x800)
    {
        return chr( 0xc0 | ($c >> 6) ) . chr( 0x80 | ($c & 0x3f) );
    }
    else if($c < 0x10000)
    {
        return chr( 0xe0 | ($c >> 12) ) . chr( 0x80 | (($c >> 6) & 0x3f) ) . chr( 0x80 | ($c & 0x3f) );
    }
    else if($c < 0x200000)
    {
        return chr(0xf0 | ($c >> 18)) . chr(0x80 | (($c >> 12) & 0x3f)) . chr(0x80 | (($c >> 6) & 0x3f)) . chr(0x80 | ($c & 0x3f));
    }

    return false;
}

$s = '&#1502;&#1493;&#1510;&#1500;&#1495;&#1514;';
$s = preg_replace('/&#(\\d+);/e', 'unicode2utf8("\\1")', $s);

echo $s;


Интересно, а сайты на иврите могут отображаться только после полной загрузки страницы? У них же всё наоборот гг гг

  Ответить  
 
 автор: Trianon   (26.07.2009 в 15:38)   письмо автору
 
   для: Жмурик   (26.07.2009 в 15:28)
 

а дальше?
где f8|3 80|3f 80|3f 80|3f 80|3f ?
где fc|1 80|3f 80|3f 80|3f 80|3f 80|3f ?
где fe|0 80|03 80|3f 80|3f 80|3f 80|3f 80|3f ?

Коль делать, так по-большому.

  Ответить  
 
 автор: Жмурик   (26.07.2009 в 15:47)   письмо автору
 
   для: Trianon   (26.07.2009 в 15:38)
 

Я тут не совсем ориентируюсь, ибо, говорю, код не мой, но эти символы разве определены? Вот цитата из педивикии:
Хотя формы записи UTF-8 и UTF-32 позволяют кодировать до 231 (2 147 483 648) кодовых позиций, было принято решение использовать лишь 1 112 064 для совместимости с UTF-16. Впрочем, даже и этого более чем достаточно — сегодня (в версии 5.1) используется немногим более 100 000 кодовых позиций.
Этот код вроде предусматривает конверт 2 097 152 символов, что даже больше того, что предусмотрено.

  Ответить  
 
 автор: Trianon   (26.07.2009 в 15:49)   письмо автору
 
   для: Жмурик   (26.07.2009 в 15:47)
 

Ну в этом плане педивикия не врет.
Но если на нее ссылаться, надо быть готовым защищать право на существование дерьма под названием utf-16.
Я имею в виду - защищать чем-то большим, чем ссылкой на то, что это любимая кодировка windows.

  Ответить  
 
 автор: Жмурик   (26.07.2009 в 16:08)   письмо автору
 
   для: Trianon   (26.07.2009 в 15:49)
 

Да, дописать F8, FC можно. А FE разве можно? В UTF-8 даже теоретически нет 1111111x ...
Максимально возможный по длине символ (6 байт) там опеределяется так
1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

  Ответить  
 
 автор: Trianon   (26.07.2009 в 16:12)   письмо автору
 
   для: Жмурик   (26.07.2009 в 16:08)
 

Ну а где нарушается алгоритм распознования-то?
Т.е. что мешает распознать
11111110 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

или ограничившись 32 актуальными разрядами -
11111110 100000xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

?

Сравнение тоже вроде не вызывает проблем.

  Ответить  
 
 автор: Жмурик   (26.07.2009 в 16:38)   письмо автору
 
   для: Trianon   (26.07.2009 в 16:12)
 

Алгоритм нигде не нарушается. Если хочется, то да, можно дописать.

[поправлено модератором]

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

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