Да...тема больная... В гугле решений видел много... Ничего не помогает.. Вообщем вместо кирилицы отображает вопросы... ЖЭто плохо.. Скажи как избавиться от этого.. Хедеры писать пробовал, мета теги пробовал...
Выложи файл который у тебя отображается вопросами. Скорее всего дело не в хедерах и мета тегах, а в кодировке самого созданного файла.
Тут надо смотреть -- на получении информация в какой кодировке ходит? Может она при извлечении из БД(?) уже не в той кодировке, а ты ее по ajax'у кидаешь
Вот держи PHP: <?php // DIAgen (x) antichat.ru @ob_start(); @ob_implicit_flush(0); error_reporting(7); function win_to_utf($str, $from = "w") { $recode['w']=array( 0x0402,0x0403,0x201A,0x0453,0x201E,0x2026,0x2020,0x2021, 0x20AC,0x2030,0x0409,0x2039,0x040A,0x040C,0x040B,0x040F, 0x0452,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, 0x0000,0x2122,0x0459,0x203A,0x045A,0x045C,0x045B,0x045F, 0x00A0,0x040E,0x045E,0x0408,0x00A4,0x0490,0x00A6,0x00A7, 0x0401,0x00A9,0x0404,0x00AB,0x00AC,0x00AD,0x00AE,0x0407, 0x00B0,0x00B1,0x0406,0x0456,0x0491,0x00B5,0x00B6,0x00B7, 0x0451,0x2116,0x0454,0x00BB,0x0458,0x0405,0x0455,0x0457, 0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417, 0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F, 0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427, 0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F, 0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437, 0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F, 0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447, 0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F ); $recode['k']=array( 0x2500,0x2502,0x250c,0x2510,0x2514,0x2518,0x251c,0x2524, 0x252c,0x2534,0x253c,0x2580,0x2584,0x2588,0x258c,0x2590, 0x2591,0x2592,0x2593,0x2320,0x25a0,0x2219,0x221a,0x2248, 0x2264,0x2265,0x00a0,0x2321,0x00b0,0x00b2,0x00b7,0x00f7, 0x2550,0x2551,0x2552,0x0451,0x2553,0x2554,0x2555,0x2556, 0x2557,0x2558,0x2559,0x255a,0x255b,0x255c,0x255d,0x255e, 0x255f,0x2560,0x2561,0x0401,0x2562,0x2563,0x2564,0x2565, 0x2566,0x2567,0x2568,0x2569,0x256a,0x256b,0x256c,0x00a9, 0x044e,0x0430,0x0431,0x0446,0x0434,0x0435,0x0444,0x0433, 0x0445,0x0438,0x0439,0x043a,0x043b,0x043c,0x043d,0x043e, 0x043f,0x044f,0x0440,0x0441,0x0442,0x0443,0x0436,0x0432, 0x044c,0x044b,0x0437,0x0448,0x044d,0x0449,0x0447,0x044a, 0x042e,0x0410,0x0411,0x0426,0x0414,0x0415,0x0424,0x0413, 0x0425,0x0418,0x0419,0x041a,0x041b,0x041c,0x041d,0x041e, 0x041f,0x042f,0x0420,0x0421,0x0422,0x0423,0x0416,0x0412, 0x042c,0x042b,0x0417,0x0428,0x042d,0x0429,0x0427,0x042a ); for ($i=0;$i<strlen($str);$i++) { $letter = ord($str[$i]); if ($letter>=0x80) { $letter -= 128; $c2 = "10111111" & "10".substr(decbin($recode[$from][$letter]), -6); $c1 = "11011111" & "110".str_repeat("0", 5-strlen(substr(decbin($recode[$from][$letter]), 0, -6))).substr(decbin($recode[$from][$letter]), 0, -6); $res .= chr(bindec($c1)); $res .= chr(bindec($c2)); } else { $res .= $str[$i]; } } return $res; } ?> И так у нас тут идет кириллица.... и все такое...) Или какой нибудь код который выполняется и выводится кириллицей... <?php $Contents = ob_get_contents () ; ob_end_clean () ; echo win_to_utf($Contents); ?> Ну думаю что тут и так все понятно...
2 DIAgen Может я в чем то и ошибаюсь, но для перевода из одной кириллической кодировки в другую в пхп есть встроенная функция :convert_cyr_string, зачем придумывать вилосипед?
а может так function utf ($input){ $input=iconv("CP1251", "UTF-8", $input); return $input; } пример utf('привет');
Эта функция конвертирует только кириллицу string convert_cyr_string ( string str, string from, string to ) Эта функция преобразует строку str из одной кириллической кодировки в другую. А на сколько я знаю.. ajax понимает только UTF-8, может и ошибаюс...) Можно и так... вот только на не которых серваках выскаивает ошибка о том что модуль для работы iconv не подключен... хз почему...
>может и ошибаюс...) скорее всего да. если тс не может менять в заголовках чарсет,пусть переведет страницы на ту кодировку в которой броузер пытается открыть еще вроде есть overmimetype хз работает или нет
А автор сам и пропал ... ) ICONV - работает не на всех серваках, т.к. идет экстеншненом к пхп. Но свою роль выполняет хорошо. В принципе Диаген предложил хорошее решение, но оно для потока ) А так, просто создать файл текстовый, открыть редактором нормальным (нотепэд++ к примеру), сразу пустой файл перевести на utf-8 (file --> Encode --> utf-8), скопировать скрипт туда и сохранить. ВОт так вот топором! )
Вот скрипты мои: info.php PHP: <?php include("config.php"); include("header.php"); ?> <script language="javascript" type="text/javascript"> var xmlhttp = createXmlHttpRequestObject(); function createXmlHttpRequestObject(){ var xmlhttp; try{ xmlhttp=new XMLHttpRequest(); } catch(e){ try{ xmlhttp=new ActiveXObject("MSXML2.XMLHTTP"); } catch(e){ try{ xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } catch(e){} } } if(!xmlhttp){ alert("Не удалось создать объект XMLHttpRequest"); } return xmlhttp; } function createRequestProcess(pdata) { xmlhttp=createXmlHttpRequestObject(); if (xmlhttp) { try { xmlhttp.open("GET", "infoajax.php?" + pdata, true); xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded;"); xmlhttp.setRequestHeader("Content-length", pdata.length); xmlhttp.send(pdata); xmlhttp.onreadystatechange = handleRequestStateChange; } catch (e) {alert('error : '+e.toString());} } } function handleRequestStateChange() { if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200) { try { ReadResponce(); } catch (e) {} } else { if (xmlhttp.status == 404){ alert("Request URL does not exist"); } else { alert("Error: status code is " + xmlhttp.status); } } } } function ReadResponce() { document.getElementById("content").innerHTML = xmlhttp.responseText; } function command(page) { fdata = "page="+page; createRequestProcess(fdata); } </script> <?php $do = isset($_GET['do']) ? $_GET['do'] : ''; $uin = isset($_GET['uin']) ? intval($_GET['uin']) : ''; $page = isset($_GET['page']) ? intval($_GET['page']) : ''; if($do == 'logs' && $uin) { $query = "SELECT * FROM `logs` WHERE `uin`='".$uin."' ORDER BY `date` DESC, `time` ASC LIMIT 0,30"; $result = mysql_query($query); echo '<table width="700" align="center">'; for($i = 0; $i < mysql_num_rows($result); $i++) { $row = mysql_fetch_array($result); $date = date("d.m.Y", $row['date']); $hour = date("H:i:s", $row['time']); echo "<tr><td align='left' width='20%'>".$date." | ".$hour."</td> <td>".wordwrap(htmlspecialchars($row['msg']), 75, "<br />\n" ,1)."</td></tr>"; } echo "</table>"; } if(!$uin) { $query = mysql_query("SELECT COUNT(*) as `logs` FROM `logs`"); $row = mysql_fetch_array($query); $logs = $row['logs']; $num = 50; $total = intval(($logs - 1) / $num) + 1; if(!$page || $page < 0) $page = 1; if($page > $total) $page = $total; $start = $page * $num - $num; $query = "SELECT * FROM `logs` ORDER BY `date` DESC, `time` ASC LIMIT ".$start.", ".$num; $result = mysql_query($query); echo '<div id="content">'; echo '<table width="700" align="center">'; for($i = 0; $i < mysql_num_rows($result); $i++) { $row = mysql_fetch_array($result); $date = date("d.m.Y", $row['date']); $hour = date("H:i:s", $row['time']); echo "<tr><td align='left' width='10%'>".$row['uin']."</td> <td align='left' width='20%'>".$date." | ".$hour."</td> <td width='400'>".wordwrap(htmlspecialchars($row['msg']), 65, "<br />\n" ,1)."</td> </tr>"; } echo "</table>"; if($page != 1) $pervpage = "<a href='#' onclick='command(1)'><< </a>"; if($page != $total) $nextpage = "<a href='#' onclick='command(".$total.")'> >></a>"; if($page - 1 > 0) $pageleft = " [<a href='#' onclick='command(".($page - 1).")'>".($page - 1)."</a>] "; if($page + 1 <= $total) $pageright = " [<a href='#' onclick='command(".($page + 1).")'>".($page + 1)."</a>] "; echo $pervpage.$pageleft."<b>[".$page."]</b>".$pageright.$nextpage; echo "</div>"; } eval(base64_decode("aW5jbHVkZSgnZm9vdGVyLnBocCcpOw==")); ?> infoajax.php PHP: <?php include("config.php"); $page = isset($_GET['page']) ? intval($_GET['page']) : ''; $query = mysql_query("SELECT COUNT(*) as `logs` FROM `logs`"); $row = mysql_fetch_array($query); $logs = $row['logs']; $num = 50; $total = intval(($logs - 1) / $num) + 1; if(!$page || $page < 0) $page = 1; if($page > $total) $page = $total; $start = $page * $num - $num; $query = "SELECT * FROM `logs` ORDER BY `date` DESC, `time` ASC LIMIT ".$start.", ".$num; $result = mysql_query($query); echo '<table width="700" align="center">'; for($i = 0; $i < mysql_num_rows($result); $i++) { $row = mysql_fetch_array($result); $date = date("d.m.Y", $row['date']); $hour = date("H:i:s", $row['time']); echo "<tr><td align='left' width='10%'>".$row['uin']."</td> <td align='left' width='20%'>".$date." | ".$hour."</td> <td width='400'>".wordwrap(htmlspecialchars($row['msg']), 65, "<br />\n" ,1)."</td> </tr>"; } echo "</table>"; if($page != 1) $pervpage = "<a href='#' onclick='command(1)'><< </a>"; if($page != $total) $nextpage = "<a href='#' onclick='command(".$total.")'> >></a>"; if($page - 1 > 0) $pageleft = " [<a href='#' onclick='command(".($page - 1).")'>".($page - 1)."</a>] "; if($page + 1 <= $total) $pageright = " [<a href='#' onclick='command(".($page + 1).")'>".($page + 1)."</a>] "; echo $pervpage.$pageleft."<b>[".$page."]</b>".$pageright.$nextpage; ?> Вообщем на первой странице все нормально выводиться т.к. там не через аякс идет, а сразу из базы... ПОтом уже идут вопросики)) Кстати сразу вопрос... Можно ли сделать из этих двух файлов - 1 файл... А то вчера ток аяксом занялся и если к каждому файлу делать еще, то это бред
Code: xmlhttp.open("GET", "infoajax.php?" + pdata, true); xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded;"); xmlhttp.setRequestHeader("Content-length", pdata.length); xmlhttp.send(pdata); гет\пост? у тебя все вместе=) ....................................................................... меняй кодировку файлов в блокноте или посылай нужные заголовки сервером ,больше повторять не буду=\