Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Что творится с форумом?

Автор злой, января 15, 2010, 20:55

0 Пользователи и 2 гостей просматривают эту тему.

Валентин Н

Равонам, раз уж вы занились форумом, может исправите  MySQL, методом диметриуса, чтобы поодерживались символы выше FFFF.
ЗАБАНИЛ ВИКИПЕДИЮ
Нижниь ıндэкс в ҷıсʌах — степень тıсяҷı
Препинания авторские!

RawonaM

Цитата: Валентин Н от июня 16, 2012, 12:08
Равонам, раз уж вы занились форумом, может исправите  MySQL, методом диметриуса, чтобы поодерживались символы выше FFFF.
Quelle méthode?


wangjhenbai

Цитата: RawonaM от июня 16, 2012, 12:12
Цитата: Валентин Н от июня 16, 2012, 12:08
Равонам, раз уж вы занились форумом, может исправите  MySQL, методом диметриуса, чтобы поодерживались символы выше FFFF.
Quelle méthode?
Offtop
Я когда-то здесь постил реализацию, но не могу её найти. Так что переписал заново.
Проблема вот в чём. MySQL, встречая символ уникода с кодом выше #xFFFF, трактует его как NULL и прекращает обработку строки(!).

Можно ли вызывать такую функцию перед записью поста в БД? (Она заменяет все коды выше #xFFFF их escape-последовательностями.) Это должно решить проблемы с авестийским (Iskandar, возможно, сделает уроки... ) и готским (как минимум Ellidi его учил).

//PHP
function preprocess_non_bmp_unicode($s) {
  return preg_replace_callback('/[\xF0-\xF7][\x80-\xBF]{3}/', function($matches) {
    $m = $matches[0];
    $a = array(ord($m{0}) & 7, ord($m{1}) & 0x7f,
               ord($m{2}) & 0x7f, ord($m{3}) & 0x7f);
    $c = $a[3] | ($a[2] << 6) | ($a[1] << 12) | ($a[0] << 18);
    return '&#' . $c . ';';
  }, $s);
}


По идее она не должна сильно загружать сервер (разве что кто-то запостит сообщение с кучей символов из не-BMP, но на этот случай можно поставить ограничение:
//PHP
function preprocess_non_bmp_unicode($s) {
  return preg_replace_callback('/[\xF0-\xF7][\x80-\xBF]{3}/', function($matches) {
    $m = $matches[0];
    $a = array(ord($m{0}) & 7, ord($m{1}) & 0x7f,
               ord($m{2}) & 0x7f, ord($m{3}) & 0x7f);
    $c = $a[3] | ($a[2] << 6) | ($a[1] << 12) | ($a[0] << 18);
    return '&#' . $c . ';';
  }, $s, 1024);
}


Если и так не подойдёт, то можно заменять это JavaScript'ом на стороне клиента (хотя это IMHO хуже, ведь JavaScript может быть отключён):
//JavaScript, я внёс небольшие изменения, которые я не протестировал
function preprocess_non_bmp_unicode(text) {
   var res = ''
   var i = 0
   var len = text.length
   while (i < len) {
      var code = text.charCodeAt(i);
      if (0xD800 <= code && code <= 0xDBFF) {
         var hi = code
         var lo = text.charCodeAt(++i)
         res += '&amp;#' + (((hi - 0xD800) * 0x400) + (lo - 0xDC00) + 0x10000) + ';'
      }
      else {
         res += text
      }
      i++;
   }
   return res
}
Если я кому-то нужен, д м игрек м д собака яндекс точка ру.

Валентин Н

Цитата: Demetrius от ноября  4, 2011, 23:49
Итак, обещаный code snippet. Он заменяет в тексте в кодировке UTF-8 все символы из плоскостей, отличных от первой, на их коды, а остальное не трогает.

function convert_utf8_to_html_entity($matches) {
        $u8 = $matches
  • ;
            $code = ((ord($u8{0}) & 0x07) << 18) |
                    ((ord($u8{1}) & 0x3F) << 12) |
                    ((ord($u8{2}) & 0x3F) << 6 ) |
                    (ord($u8{3}) & 0x3F);
            return '&#' . $code . ';';
    }

    function fix_higher_planes_in_utf8($in) {
            return preg_replace_callback(
                    '/[\xF0-\xF7][\x80-\xBF]{3}/',
                    'convert_utf8_to_html_entity',
                    $in);
    }[/tt]

    Функцию fix_higher_planes_in_utf8 предлагается выполнять перед записью поста в базу данных.

    При чтении из базы данных ничего делать не надо.
Дим, это?
ЗАБАНИЛ ВИКИПЕДИЮ
Нижниь ıндэкс в ҷıсʌах — степень тıсяҷı
Препинания авторские!

wangjhenbai

Цитата: Валентин Н от июня 16, 2012, 12:48
Дим, это?
Да, это. Я вон выше уже новую версию дал, только что переписанную.

Но новая будет работать только в PHP 5.3.0 и выше (т.к. анонимные функции), а старая зато захламляет пространство имён.
Если я кому-то нужен, д м игрек м д собака яндекс точка ру.

RawonaM


wangjhenbai

Проверка из быстрого ответа: 𐬨𐬀𐬰𐬛𐬀

Надеюсь, работает.
Если я кому-то нужен, д м игрек м д собака яндекс точка ру.

wangjhenbai

Проверка из основной формы: 𤯔 [rén]

Работает, спасибо!
Если я кому-то нужен, д м игрек м д собака яндекс точка ру.


wangjhenbai

Проверка, большой текст:
Если я кому-то нужен, д м игрек м д собака яндекс точка ру.

Bhudh

Antitest.

Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Bhudh

Из основной формы не хочет, обнуляет пост.
А шрифт почему-то Опера мне так и не показывает :(.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

wangjhenbai

Гм... А мне даёт из основной формы: 𐬛𐬈𐬨𐬉𐬙𐬭𐬌𐬎𐬯

У меня работает. Firefox 12.
Если я кому-то нужен, д м игрек м д собака яндекс точка ру.

antic

У меня в тестовых текстах видны вместо букв квадратики, в которые вписаны какие-то цыфры
— Боже мой, боже мой, чем вы вынуждены заниматься! Но я спрашиваю вас, кто-то все-таки летит ведь к звёздам! Где-то строят мезонные реакторы! Где-то создают новую педагогику! Боже мой, совсем недавно я понял, что мы даже не захолустье, мы — заповедник! В глазах всего мира мы — заповедник глупости, невежества и порнократии.
АБС «Хищные вещи века»

Bhudh

Шрифта нет. Квадратики сам лис подставляет.
Цифры — U-коды.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

wangjhenbai

Цитата: antic от июня 16, 2012, 13:17
У меня в тестовых текстах видны вместо букв квадратики, в которые вписаны какие-то цыфры
Поставьте шрифт Ahuramzda.
Если я кому-то нужен, д м игрек м д собака яндекс точка ру.

ostapenkovr

Цитата: antic от июня 16, 2012, 13:17
У меня в тестовых текстах видны вместо букв квадратики, в которые вписаны какие-то цыфры
У меня тоже.
Я не переживал, думал, это - какой-то квадрослов... :)

Bhudh

Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

wangjhenbai

Цитата: Bhudh от июня 16, 2012, 13:22
Вот что у меня Ахурой-мздой:
У меня дома так. Не знаю, как лечить. Сделайте юзерскипт, который заменяет мзду транслитерацией и/или legacy-шрифтами.
Если я кому-то нужен, д м игрек м д собака яндекс точка ру.

Bhudh

Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

wangjhenbai

Цитата: Bhudh от июня 16, 2012, 13:25
Цитата: wangjhenbai от июня 16, 2012, 13:24Сделайте
:???
Ну не мне же это делать... ;D Может, разве что, если буду в странном расположении духа.
Если я кому-то нужен, д м игрек м д собака яндекс точка ру.

Bhudh

Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

wangjhenbai

А, это... Всё время забываю, к кому я как обращаюсь. Не обижайся.;D
Если я кому-то нужен, д м игрек м д собака яндекс точка ру.

Bhudh

Я не обижаюсь, я удивляюсь :) )). Думал, можь, ещё к кому-то, бо плюраль).
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр