台灣最大程式設計社群網站
線上人數
2614
 
會員總數:245250
討論主題:189110
歡迎您免費加入會員
討論區列表 >> AJAX / JSON / jQuery >> php + ajax 聊天室~~讀和寫都是亂碼!
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
php + ajax 聊天室~~讀和寫都是亂碼!
價值 : 20 QP  點閱數:5752 回應數:10

樓主

ten
門外漢
0 7
138 14
發送站內信

用PHP + Ajax的方式寫聊天室,資料庫是 access ,但是中文會出現亂碼,也不知道問題出在那?

整個聊天室的檔
ajax_html:聊天室主要檔案
ajax_conn.php :連接資料庫
ajax_receive.php:將資料寫進資料庫
ajax_response.php:讀資料庫

單獨執行ajax_response.php,讀到的中文不會出現亂碼!

執行 ajax_html 讀到的中文是亂碼,寫進去的中文也是亂碼!

請問有誰知道問題出現在那~~~~



--------------------ajax_chat.html程式碼開始---------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5" />
<title>簡易聊天室(Ajax 版)</title>
<link rel="stylesheet" href="ChatCSS.css" type="text/css" />
<script type="text/javascript">

function scrollmove() {
ChatBody.scrollTop = ChatBody.scrollHeight;
}

function GetAJAX(){
var xmlhttp = false;
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("POST","Ajax_response.php",true);
xmlhttp.send(null);
xmlhttp.onreadystatechange=function() {
if ( xmlhttp.readyState==4 || xmlhttp.readyState=='complete' ){
ChatBody.innerHTML = xmlhttp.responseText;
scrollmove();
}
}
}

function SendAJAX(){
if (ChatForm.ChatText1.value != "" && ChatForm.ChatText2.value != ""){
var DataToSend = "ChatText1=" + ChatForm.ChatText1.value + "&ChatText2=" + ChatForm.ChatText2.value;
var xmlhttp = false;
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("POST","Ajax_receive.php",false);
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=big5');
xmlhttp.send(DataToSend);

ChatForm.ChatText2.value = "";
GetAJAX();
}
}

setInterval('GetAJAX()', 1000);
</script>
<style type="text/css">
<!--
.style3 {
font-size: 24px;
font-weight: bold;
}
body {
margin-bottom: 0px;
}
.style10 {font-size: 18px}
-->
</style>
</head>
<body Onload="javascript:GetAJAX();">
<p align="center" class="style3">簡易聊天室(Ajax 版)</p>
<table border="1" align="center">
<tr>
<form id="form1" name="ChatForm" method="post">
<td width="877" height="462"><div class="ChatBody" id="ChatBody"></div>
Name:
<input type="text" name="ChatText1" />
<br />
<span class="style10">Chat:</span>
<input type="text" name="ChatText2" />
<input type="button" name="Submit" value="送出" onClick="SendAJAX();" /></td>
</form>
</tr>
</table>
<table height="51" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="877" height="51"><input type="button" name="back" value="回主畫面" onClick="location='default.php'" /></td>
</tr>
</table>
</body>
</html>
--------------------程式碼結束---------------------

搜尋相關Tags的文章: [ PHP + Ajax的方式寫聊天室 ] , [ 中文會出現亂碼 ] ,
本篇文章發表於2008-05-11 12:13
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
作者回應

ten
檢舉此回應
一樣的程式碼,這樣比較好閱讀~~


本篇文章回覆於2008-05-11 12:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

asakous
檢舉此回應
AJAX 溝通是以 utf8 為主,所以網頁的 charset 不能設為 big5
本篇文章回覆於2008-05-12 11:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

ten
檢舉此回應
我把第3行和31行改成utf-8

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");

但還是會寫入亂碼!

讀的問題已經解決了,

在ajax_response.php加上

header('Content-Type: text/html; charset=big5');

就不會讀到亂碼!

同樣的我也在ajax_receive.php加上

header('Content-Type: text/html; charset=big5');

還是一樣讀到亂碼!

ajax_receive.php檔裡面沒有html語法的東西,只有php~~~

我真的不知道問題出在那!

以下是 ajax_receive.php 的程式碼~~~


本篇文章回覆於2008-05-12 14:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

jn
檢舉此回應
提議用這個試試看:
mb_convert_encoding(字串,欲轉換的編碼,原本的編碼);

不好意思,我對這個程式還蠻有趣的,
不知是否可以寄全部的程式碼讓我研究一下呢?
信箱:snowerh@pchome.com.tw
本篇文章回覆於2008-05-18 01:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

jn
檢舉此回應
不好意思,可以麻煩你敘述一下「ajax_response.php」?
「ajax_receive.php」和「ajax_html」大致了解了,
如果不麻煩的話,請您貼一下「ajax_response.php」的原始碼,感謝您!
本篇文章回覆於2008-05-18 11:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

jn
檢舉此回應
請問一下,可以讀但資料庫寫不進去,請問要改什麼設定嗎??
本篇文章回覆於2008-05-18 15:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

Leslie
檢舉此回應
這段好像有點怪怪的:
xmlhttp.send(null);
xmlhttp.onreadystatechange=function() {
if ( xmlhttp.readyState==4 || xmlhttp.readyState=='complete' ){
ChatBody.innerHTML = xmlhttp.responseText;
scrollmove();

通常應該是要先告訴瀏覽器,如果伺服器回應之後該怎麼處裡,然後才會送出request,
因為是非同步的,所以如果你的request先送出去,
還沒來得及傳回值,就結束了。
如果是我,我會把onreadystatechange放在xmlhttp.send(null);之前,
這樣當你的request送出去之後,從伺服器丟回來的值,瀏覽器才會知道該怎麼處理。
readystate..一般如果成功應該是寫200...錯誤會有403或者404..

以上是個人淺見,不保證正確,有錯誤請原諒 = =
本篇文章回覆於2008-05-20 11:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

ten
檢舉此回應
問題已經決解了,謝謝大家 ^^

這個是php作業四的題目,我沒辨法公佈全部程式碼!

避免有人想不勞而獲!

本篇文章回覆於2008-05-22 08:26
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

ten
檢舉此回應
請問一下,可以讀但資料庫寫不進去,請問要改什麼設定嗎??

致於這個問題,沒有錯誤訊息我怎麼知道你為什麼寫不進去!
本篇文章回覆於2008-05-22 08:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

Leslie
檢舉此回應
而且if ( xmlhttp.readyState==4 || xmlhttp.readyState=='complete' )
這樣寫應該也不對吧? = =a
是不是應該這樣=>if ( xmlhttp.readyState==4 && xmlhttp.readyState=='200' )..
要把||改成&&..
本篇文章回覆於2008-05-23 11:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.