Проблема с кодировками

Discussion in 'PHP' started by -=Zhenek=-, 26 May 2011.

  1. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    Есть сайт, форум и самописный элемент.

    Сайт и форум win1251 (dle 9.2 AND vbulletin)

    Самописный на utf8

    Мне нужно чтобы в самописном элементе показывалось кто сегодня посетил сайт,а кто нет.

    Сначала решил реализовать встроив в код сайти форума функцию, но были сильные проблемы.

    Решил просто в коде сайта вызывать ифрейм который в гет передавал имя пользователся.


    Но вот проблема.. Если вызываемый пхп фаил в utf8 то выскакивает ошибка Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='

    Если использовать iconv

    $userxx = iconv("win1251","UTF8",$_GET['user_name']);

    то переменная будет пустая

    Если фаил преобразовать в win1251 , то тоже есть ошибка..

    нарыл функцию

    PHP:
    function win_utf8($in_text) { 
       
    $output "";
       
    $other[1025] = "Ё";
       
    $other[1105] = "ё";
       
    $other[1028] = "Є";
       
    $other[1108] = "є";
       
    $other[1030] = "I";
       
    $other[1110] = "i";
       
    $other[1031] = "Ї";
       
    $other[1111] = "ї";
       for (
    $i 0$i strlen($in_text); $i++){
          if (
    ord($in_text{$i}) > 191) {
             
    $output.="&#".(ord($in_text{$i})+848).";";
          }else {
             if (
    array_search($in_text{$i}, $other)===false){
                
    $output.=$in_text{$i};
             }else {
                
    $output.="&#".array_search($in_text{$i}, $other).";";
             }
          }
       }
       return 
    $output;
    }
    Которая приводит ники к таким

    #1083;#1102;#1073;#1080;#1090;#1077;#1083;#1100; #1088;#1099;#1073;#1072;#1083;#1082;#1080;

    Потом в коде делаю так :

    if($userxx == "#1083;#1102;#1073;#1080;#1090;#1077;#1083;#1100; #1088;#1099;#1073;#1072;#1083;#1082;#1080;") {$userxx="Любитель рыбалки";}

    Убрал перед символами & ибо ачат приводит к нормальному виду

    И с базой сравнивается отлично.. Но если в нике есть ё,i то ниче не работает(

    База в UTF8
     
    #1 -=Zhenek=-, 26 May 2011
    Last edited: 26 May 2011
  2. 3lancer

    3lancer New Member

    Joined:
    18 Jan 2011
    Messages:
    25
    Likes Received:
    0
    Reputations:
    0
    в начало скрипта:

    setlocale(LC_ALL,"utf-8");
    mb_internal_encoding('UTF-8');

    если база в utf8 пеhtl обращением к конкретной таблице пропиши:
    mysql_query("SET NAMES utf8;");
     
  3. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    Первое не помогло. Второе уже было