Проблема с кодировками на форуме...

Bueno

Новичок
Проблема с кодировками на форуме...

Всем прет! Пишу небольшой форум и появилась такая проблема что если на форум напишут
сообщение на лат.языке то спец.символы не отображаються т.к основная
кодировка cp1251 и есть функция которая кодирует символы вот она:
PHP:
function Charset2Entity($str,$charset='cp1257'){
  return preg_replace('#[\x80-\xFF]#se',
                      "'&#'.join('',unpack('v',iconv('$charset','UTF-16LE','$0'))).';'",
                      $str);
}
Но с ней проблема она кодирует только в определенной кодировке и кодирует всё.
Реально ли сделать чтобы русские и енг. сиволы не кодировались а кодировались только
лат.спец.символы? Если реально то как?

Зарание благодарю!
 

Фанат

oncle terrible
Команда форума
а ты не мог бы объясниь - нафига тебе вообще функция, которая кодирует символы?

-~{}~ 13.05.07 18:51:

в какой кодировке у тебя отдаются страницы пользователю?
 

Bueno

Новичок
А как ещё можно на одной стринице разместить символы которые относятся к разным кодировкам? рус=cp1251, лат=cp1257, слышал про Unicode но как с ним работать непонятно
---------------------------------------------
cp1251
 

Фанат

oncle terrible
Команда форума
Это нестрашно. Можно почитать.
Если у тебя двуязычный сайт, то давно надо было его переводить на юникод.

а какие в латинском языке спецсимволы? Я, вроде, когда в школе учился, таких не помню.
 

Bueno

Новичок
Я иммел ввиду лат. это Латышский - Там дофига всяких спец символов :)
 

Фанат

oncle terrible
Команда форума
тьфу.
надо ж так сокращать.
тем более.
В общем, про юникод в разделе "вопрос-ответ " написано.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
На Юникоде не работают. Это просто кодировка, такая же, как cp-1251 или latin-1.
Пишешь текст в кодировке utf-8 и устанавливаешь эту кодировку в HTML.
Проще всего - в разделе <head> страницы вывести
<meta http-equiv="content-type" content="text/html; charset=utf-8">

Существующий текст со "спецсимволами" надо конвертировать в UTF-8.
 

Bueno

Новичок
Поставил ... <meta http-equiv="content-type" content="text/html; charset=utf-8">
вместо Русского одни иероглифы

У меня несколько вопросов...

1) Как писать на utf-8? Я пользуюсь CuteFTP pro
2) Каким образом конвертировать спец символы в UTF-8?

Это будет форум туда фиг знает что будут писать, могут в одном посте написать на Русском и на латышском и это всё будет работать через MySQL

Сорри мож за нелепые вопросы, я уже реально запутался с этими кодировками

--------------------------------

Вобщем немного разобрался, поставил везде utf8(php,mysql,apache)
сделал форму(http://asia.biglove.lv/test2.php) которая посылает текст в МУСКЛ и вроде всё ок текст приходит в УТФ и отображается нормально единственное когда смотришь Source этой страницы там где должны быть слова одни иероглифы и когда в базу захожу там тоже самое полная билеберда типа этого "додлодщ�?РѕДјДЃ" хотя я там тоже УТФ поставил, над ещё разобраться как писать в УТФ ...
 

ustas

Элекомист №1
А русский кто будет в utf переводить? Иероглифы только потому что ты пользуешься прогами с латиниццей, смотри другими.
и вообще посмотри код почти любой cms на http://sourceforge.net/. сильно поможет.
 

Bueno

Новичок
Почти все проблеми решил осталась одна, вот она:

Для отображения текста на сайте я использую эту функцию:
PHP:
function CP1251toUTF8($str){
  static $table = array("\xA8" => "\xD0\x81", // 
                        "\xB8" => "\xD1\x91", // 
                        "\xC4" => "\xC4\xBC", // 
                        "\xA2" => "\xD1\x9E", // 
                        "\xAA" => "\xD0\x84", // 
                        "\xAF" => "\xD0\x87", // 
                        "\xB2" => "\xD0\x86", // 
                        "\xB3" => "\xD1\x96", // 
                        "\xBA" => "\xD1\x94", // 
                        "\xBF" => "\xD1\x97", // 
                       );
  return preg_replace('#[\x80-\xFF]#se',
                      ' "$0" >= "\xF0" ? "\xD1".chr(ord("$0")-0x70) :
                       ("$0" >= "\xC0" ? "\xD0".chr(ord("$0")-0x30) :
                        (isset($table["$0"]) ? $table["$0"] : "")
                       )',
                      $str
                     );
}
Русский она конвертирует без проблем но со спец.символами проблема но как я понимаю здесь ее можно решить только надо узнать коды символов с одной частью разобрался а с другой немогу понять:
"\xA1" => "\xC4\xBC"(=&#257; ), // "\xA1" - " Это символ который был введён а "\xC4\xBC" - символ который будет показан (С ним я разобрался есть сайт где вводишь символ и тебе возвращают hex) но вот какой код будет равен &#257; в первом варианте ? типа "\x??"(=&#257; ) => "\xC4\xBC"(=&#257; ),
 

Bueno

Новичок
Оказалось всё намного проще чем я думал! Надо просто весь текст набирать отдельным редактором в UTF8 и всё :)

Всем спасибо за помощь!
 

Akvar

Новичок
Вдогонку к этому...
ты объясняешь MySQL серверу в какой кодировке с ним общаешься? ( mysql_query("SET NAMES 'utf8'"); )
Я очень долго не мог подружится с UTF8 пока не понял, что нужно это прописывать (были проблемы с переносимостью баз данных)
 

Bueno

Новичок
Да, без указаня кодировки будут проблемы, тоже долго с этим сидел
 
Сверху