Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Переход с ch1251 на UTF-8 ЧАТ-сообщение

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Lolya
Отправлено: 05 Ноября, 2018 - 21:42:24
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2018  


Помог: 2 раз(а)




Прошу помощи с правильным выводом сообщений на любых языках. По умолчанию старый скрипт был в кирилице - ср1251, сейчас перевожу на UTF-8 и столкнулась с одной проблемой, вывод текста в чат старый вариант такой:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $shout = convert_text(urldecode(decode_unicode_url($_GET["shout"])));


После перекодировки страницы чата в UTF-8 без BOM и вставкой:
CODE (htmlphp):
скопировать код в буфер обмена
  1. header("Content-type: text/html; charset=utf-8");
  2. mysql_query("set names 'utf8'");


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

Если я меняю код на вот этот:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $shout = htmlspecialchars_uni(urldecode(decode_unicode_url($_GET["shout"])));


Русские и английские буквы работают отлично, но вместо азиаткого языка (трех) и спец-символов типа <>& - идет абракадабра полная.

Помогите пожалуйста с выводом нормального текста (универсального), как это было в старой версии ср1251. Где ошибка, подскажите плиз.

(Отредактировано автором: 05 Ноября, 2018 - 22:50:53)

 
 Top
Lolya
Отправлено: 06 Ноября, 2018 - 13:09:55
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2018  


Помог: 2 раз(а)




Так, вопрос немного переделаю, решила пока таким методом тыка:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $shout = unesc($_GET["shout"]);


И в ява-скрипте чата был такой код:
CODE (htmlphp):
скопировать код в буфер обмена
  1. function sendShout(formObj) {
  2.     Shout = formObj.shout.value
  3.     if (Shout.replace(/ /g, '') == '') {
  4.         alert('Вы должны вести сообщение!')
  5.         return false }
  6.     sb_Clear();
  7.     var ajax = new tbdev_ajax();
  8.     ajax.onShow ('');
  9.     //ajax.onShow = function() { };
  10.     var varsString = "";
  11.     ajax.requestFile = "shoutbox.php";
  12.     ajax.setVar("do", "shout");
  13.     ajax.setVar("shout", escape(Shout));
  14.     ajax.method = 'GET';
  15.     ajax.element = 'shoutbox';
  16.     ajax.sendAJAX(varsString);
  17.     return false
  18. }


Удалила escape(Shout) и оставила просто Shout, вот так:

CODE (htmlphp):
скопировать код в буфер обмена
  1. function sendShout(formObj) {
  2.     Shout = formObj.shout.value;
  3.     if (Shout.replace(/ /g, '') == '') {
  4.         alert('Вы должны вести сообщение!')
  5.         return false;
  6.     }
  7.     sb_Clear();
  8.     var ajax = new tbdev_ajax();
  9.     ajax.onShow ('');
  10.     var varsString = "";
  11.     ajax.requestFile = "shoutbox.php";
  12.     ajax.setVar("do", "shout");
  13.     ajax.setVar("shout", Shout);
  14.     ajax.method = 'GET';
  15.     ajax.element = 'shoutbox';
  16.     ajax.sendAJAX(varsString);
  17.     setTimeout("scrolling();", 700);
  18.     setTimeout("updatechatnow();", 100);
  19. return false;
  20. }


ВСЁ работает, любая кодировка и спец-символы:
CODE (htmlphp):
скопировать код в буфер обмена
  1. +  "  "  '  &  *  ^_^  &  <<   >>  !  -  =  \  |  /  @  $  %  #  ~  [   ]   }   {   ;   :   ?   (   )

КРОМЕ:

Эти два символа НЕ хотят заноситься в БД, ну и собственно отправляться в чат, происходит игнор сообщения где они находятся, то-есть, если будет 1+1=2, то в чат отправится 1+1. Так-же само и 1&1 - то в чат отправится только 1.

Может кто помочь с этими последними символами? Пожалуйста.

(Отредактировано автором: 06 Ноября, 2018 - 13:14:15)

 
 Top
andrewkard
Отправлено: 07 Ноября, 2018 - 16:42:13
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Попробуйте

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. encodeURIComponent(Shout);
  3.  


еще как вариант всю строку загнать в base64
 
 Top
Lolya
Отправлено: 19 Ноября, 2018 - 19:10:09
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2018  


Помог: 2 раз(а)




andrewkard пишет:
Попробуйте

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. encodeURIComponent(Shout);
  3.  


еще как вариант всю строку загнать в base64


Нет, не помогает, к сожалению. Огорчение
 
 Top
andrewkard
Отправлено: 21 Ноября, 2018 - 15:33:55
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Lolya пишет:
Нет, не помогает, к сожалению.

что конкретно?
Какая строка прилетела на сервер, какие действия провели с ней перед записью, что записалось в БД. Какая строка отобразилась после выборки из БД.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB