Проблема с UTF-8 (юникод)

Автор iSpania.Net, 30 января 2006, 17:57:26

« назад - далее »

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

iSpania.Net

Всем привет.
Помогите разобратся с моей проблемой.
Мой форум на юникоде (utf-8), в темах и сообщениях заглавная буква "Р" отображается как знак вопроса "?"
Тут можно посмотреть ошибку в слове "=> УНИВЕ�"
Подскажите в каком файле парсятся темы?
Спасибо.

Mavn

На самом деле есть ошибочка в smf 11rc2 (я думаю речь имено об этой версии идет) с отображением некоторых символом в utf8.
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

iSpania.Net

Да, именно о 1.1 RC2.
А как решить эту проблему или какой файл овечает за эти преобразования?

Bic

Собственно говоря проблема уже поднималась http://www.simplemachines.ru/index.php?topic=287.0 , но решения не было. Вообщем, буквы "Р", "И", "ш" отображаются в виде закорючки �?  в юникоде (utf-8). Может кто подскажет, как это исправить? Или придется ждать релиза?

Mavn

Нормальная поддержка utf-8 будет реализована в следующем релизе так что прейдется подождать.

PS Если нашли тему с похожей проблемой то пишите в ней, а не создавайте новую тему! 
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

Bic

Ясно, спасибо за ответ.
Я хотел в эту тему написать, но чего-то показалось, что она закрыта, поэтому написал в новую, звиняйте...

mcmadcat


Bic

#7
mcmadcat спасибо, это действительно работает!
Вообщем, в index.php прописал
// Connect to the MySQL database.
if (empty($db_persist))
   {$db_connection = @mysql_connect($db_server, $db_user, $db_passwd);
   mysql_query("set names utf8", $db_connection);}
else
   {$db_connection = @mysql_pconnect($db_server, $db_user, $db_passwd);
   mysql_query("set names utf8", $db_connection);}

в файлах index.russian.php и Install.russian.php (Themes/default/languages ) установил utf-8 (['lang_character_set'] = 'utf-8')  , перевел все файлы в папке Themes в кодировку UTF-8 с помощью текстового редактора AkelPad.
Что-бы устранить проблему с квадратиком в конце обрезанных строк переписал функцию function shorten_subject в Subs.php (решение не моё)
function shorten_subject($subject, $len)
{
        $reallen = 0;
        for ($i = 0; $i < strlen($subject); $i++)
        {
                $reallen = $i;
                $len--;
                $c = ord($subject{$i});
                if ($c < 192)
                        continue;
                elseif ($c < 224)
                        $i++;
                elseif ($c < 240)
                        $i += 2;
                elseif ($c < 248)
                        $i += 3;
                elseif ($c < 252)
                        $i += 4;
                elseif ($c < 254)
                        $i += 5;
                if (!$len)
                        break;
        }
if ($len) return $subject;
else return substr($subject, 0, $reallen) . '&hellip;';

}
  Вроде все нормально, но за исключением  маленькой проблемки: жму кнопку предварительный просмотр, а вместо показа поста, пишет"Ожидание предварительного просмотра..." и дальше ничего не показывает.
И еще есть проблемка с кракозяблами в начале и конце обрезанных строк  в результатах поиска.
И сущий пустяк, просто вроде не должно так быть : при просмотре кода страницы непонятные точки (а в Опере квадратики) , в самом начале, перед ..<!DOCTYPE html PUBLIC...
база МуSQL стоит в utf8_general_ci , сам форум: http://www.forum.znayki.com

Может подскажет кто, как эти проблемки исправить?

mcmadcat

а зачем пересохранаять?????
у тебя страницы должны отдаваться в cp1251, а текст из базы просто конвертится из utf-8 в cp1251 и всё.

Bic

Цитата: mcmadcat от 26 апреля 2006, 11:29:30
а зачем пересохранаять?????
у тебя страницы должны отдаваться в cp1251, а текст из базы просто конвертится из utf-8 в cp1251 и всё.
Если не пересохранять файлы в папке Themes в кодировке UTF-8, то все в кракозяблах получается.
А почему  страницы должны отдаваться в cp1251? Мне ведь нужен форум в кодировке UTF-8. Или я чего-то не понимаю?

mcmadcat

а. так тебе сам форум нужен в utf8, ну тогда да.
А я то работаю в cp1251 и у меня просто мускулина в utf8.

Mongoose

О, мой shorten_subject :)

Проблема: квадратик вместо русской "P"

Решение найдено: В Subs-Post.php строку 262:

if (!$previewing)
$message = strtr(implode('', $parts), array('  ' => '&nbsp; ', "
" => '<br />', "xA0" => '&nbsp;'));
else
$message = strtr(implode('', $parts), array('  ' => '&nbsp; ', "xA0" => '&nbsp;'));

заменяем на

if (!$previewing)
$message = strtr(implode('', $parts), array("
" => '<br />'));
else
$message = strtr(implode('', $parts), array('  ' => '&nbsp; '));

Потенциально остались проблемы везде, где прикручена замена xA0 на неразрывный пробел.

Опубликовано: 29 Апреля 2006, 21:09:46
Цитата: Bic от 25 апреля 2006, 16:11:23
Вроде все нормально, но за исключением  маленькой проблемки: жму кнопку предварительный просмотр, а вместо показа поста, пишет"Ожидание предварительного просмотра..." и дальше ничего не показывает.
Это скорее всего проблема моста от Joomlahacks

Цитата: Bic от 25 апреля 2006, 16:11:23
И сущий пустяк, просто вроде не должно так быть : при просмотре кода страницы непонятные точки (а в Опере квадратики) , в самом начале, перед ..<!DOCTYPE html PUBLIC...
Скорее всего ты при сохранении какого-то php-файла в utf-8 установил (не убрал) добавление Unicode Signature (BOM) - двубайтовый идентификатор utf-кодировки.

Bic

#12
ЦитироватьО, мой shorten_subject :)
Верно,ты мне его в личке на operafan.net посылал.
ЦитироватьПроблема: квадратик вместо русской "P"
Решение найдено: В Subs-Post.php строку 262:
А это уже вроде и не нужно, потому что после правки index.php проблемы с буквами "Р","ш", "И" исчезают.
Остаются проблемы:
с закорючками в конце обрезанных строк - решается твоим shorten_subject,
и с закорючками в результатах поиска (в начале и конце обрезанных строк)  - решения пока нету.
Цитироватьпри сохранении какого-то php-файла в utf-8 установил (не убрал) добавление Unicode Signature (BOM)
Пересохранил все без BOM (использовал Notepad++) и непонятные точки исчезли, а также пропала проблема с предварительным просмотром, ура!!! O0 Спасибо, теперь все просто чудесно!!! :)

Mongoose

Цитата: Bic от 30 апреля 2006, 02:48:45
Верно,ты мне его в личке на operafan.net посылал.А это уже вроде и не нужно, потому что после правки index.php проблемы с буквами "Р","ш", "И" исчезают.
Дык вышеописанная правка index.php помогает, если у тебя форум в win-1251, а база в utf-8, как я понял. А у меня и база, и форум, оба в utf-8.

Bic

Цитата: mongooseДык вышеописанная правка index.php помогает, если у тебя форум в win-1251, а база в utf-8, как я понял. А у меня и база, и форум, оба в utf-8.
Как ни странно, правка index.php работает в обоих случаях (set names разный прописывается, естественно).У меня тоже, и база,и таблицы, и форум, все в utf-8.


Цитата: mongooseРешение найдено: В Subs-Post.php строку 262:
Цитата: BicА это уже вроде и не нужно, потому что после правки index.php проблемы с буквами "Р","ш", "И" исчезают.
Нет, я не прав, все-таки нужно править Subs-Post, иначе ссылки в постах отображаются криво.
Опубликовано: 07 Мая 2006, 14:32:54
ЦитироватьПотенциально остались проблемы везде, где прикручена замена xA0 на неразрывный пробел
Поэтому удалил , "xA0" => '&nbsp;' на 1802 и 1840 строке в Subs.php

Mongoose

Учтите, что проблема с "Р" гораздо шире. Например будут иметь проблемы юзеры, попытавшиеся зарегистрироваться с этой буквой в имени/пароле.
А если шире, то во всех модулях, где встречается такая замена.

Vadweb

Столкнулся с проблемой отображения Юникода в статьях.
Суть проблемы:
Большое количество русского текста, отформатированного при помощи html-тегов. Русский текст оказался в юникоде - набивал посредством копи-паста. При отображении статьи, еще до загрузки шаблонных стилей - отображается нормально, после - вылезает неперекодированная дрянь.
Кто поможет решение?
Очень уж текста много, заново копи-пастить - умереть...

hc2hunter

Столкнулся с подобной проблемой на форуме v1.1.4 UTF-8 RUS

Тоже попадаются (правда очень-очень редко) сообщения, которые "невидимы".
Особенно часто где есть прямые ссылки в виде http://......

как править данную проблему не знаю...  :-[ потмоу что в 1.1.4 уже файлы все другие и указанные вами строки уже просто отсутствуют...

bbbbbb


hc2hunter


Mavn

Цитата: hc2hunter от 09 февраля 2008, 12:57:22
Столкнулся с подобной проблемой на форуме v1.1.4 UTF-8 RUS

Тоже попадаются (правда очень-очень редко) сообщения, которые "невидимы".
Особенно часто где есть прямые ссылки в виде http://......

как править данную проблему не знаю...  :-[ потмоу что в 1.1.4 уже файлы все другие и указанные вами строки уже просто отсутствуют...
а что значит невидимы?
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

hc2hunter

вот посмотрите на свое сообщение и представте, будто там под цитатой ничего нет.
вообще ничего, пустое место.
Зато если нажать "редактировать" - все содержимое видно.

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

Mavn

Пример сообщения в студию...
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

hc2hunter

а это не прокатит... потому что если попробовать его перенабрать (еще и другим пользователем), то его скорее всего будет видно. Уже пробовали.

Могу разве что скриншотов понаснимать, как еще такое увижу.