台灣最大程式設計社群網站
線上人數
945
 
會員總數:245232
討論主題:189102
歡迎您免費加入會員
討論區列表 >> AJAX / JSON / jQuery >> AJAX 文字傳輸和特殊符號之迷<重賞>
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
AJAX 文字傳輸和特殊符號之迷<重賞>
價值 : 500 QP  點閱數:15811 回應數:23

樓主

giu
門外漢
0 173
3102 462
發送站內信

捐贈 VP 給 giu
大家新年快樂~祝大家新年大發財~

問題如下,我使用ajax傳輸文字,然後要把輸入的文字使用php新增一個文字檔,把內容存在裡面
,當然這看起來很簡單,但重點如下

1.可以存成中文,日文,各國語言。
2.♥ ♣ ♧ ☻ 這一類特殊符號編碼,可以正常存進文字檔,且存入的樣式如。
3.文字的型態為big5(ANSI),不要UTF-8格式。

如果說是單純的傳送中文當然可以用簡單的函式解決~
但如果有特殊符號編碼,就會無法顯示~因為ajax在傳輸中文會以UTF-8格式傳輸~
但這樣文字檔就會被存成UTF-8檔案格式,如果叫出此文字檔內容則會出現亂碼,
當然我們可以調整瀏覽器編碼型態,但這樣就不夠完美了~
在想是否可以傳輸資料時,php後端可以自動曾測是否是特殊符號編碼,然後把他轉成&#nnnn這類資編碼,
真的很急需,所以才會想說請教高手們如何解決!!
大至上,就是好像沒有使用ajax傳輸一樣~可以自由的輸入任何東西都不會出錯



而文字檔內容希望能如以下

1.txt
//-------------------------------//
大家好 &#nnnn 我是會員
//-------------------------------//

而在網頁上套入此文字檔顯示的當然就是如下
//-------------------------------//
大家好 ♥ 我是會員

//-------------------------------//

這個&#nnnn符號可能就是代表♥、♣、♧、☻的任何一個,
問題如下,其實重點在第2第3,能夠把檔案存成big5(ANSI),
希望高手賜教~~誰能解決呢~
^^

搜尋相關Tags的文章: [ php ] , [ script ] ,
本篇文章發表於2007-02-26 15:30
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

KEN
檢舉此回應
PHP 部份, 還是儲存成 UTF-8 的格式 (我的 Notepad++ 在 BIG5 底下, 打不出來 "心號", 所以就用 UTF-8 了)



接下來是 HTML 部份:


我在 IE7 和 Firefox 底下看, 用 BIG5 編碼, 都可以正確顯示出 "心號"。
本篇文章回覆於2007-02-26 17:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

giu
捐贈 VP 給 giu 檢舉此回應
ken你好~謝謝你熱心的回應~

而你說的Notepad++ 在 BIG5 底下, 打不出來 "心號", 這是當然的,所以我才需要把他解成"心號"的原始編碼如 &#nnnn

基本上你的方式我之前就試過當然是可以,但是你文字檔一樣是utf-8格式,這樣當我網頁套入這一個文字檔,內容就會是亂碼

,加油希望你有更好的方式,但我也感謝你的參考。
本篇文章回覆於2007-02-26 17:34
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

daniel
檢舉此回應
我還沒遇過這種問題,不過你可試試看以下三個方法:
特殊字元編碼->htmlspecialchars
解碼->htmlspecialchars_decode
轉碼->mb_convert_encoding
本篇文章回覆於2007-02-26 23:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

giu
捐贈 VP 給 giu 檢舉此回應
htmlspecialchars=將特殊字元轉成 HTML 格式
htmlspecialchars_decode=當然是將特殊字元轉成 HTML 格式的解碼
mb_convert_encoding=是一種函式可以將特殊字元編碼

以上這些問題我之前都試過~但是不行~~~
請問高手們有還有啥方式嗎~謝謝

本篇文章回覆於2007-02-27 00:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

asakous
檢舉此回應
php 在處理這些『特殊字元 煄@琚@晼@ 』也許本身就有問題。我不確定。
但如果你要處理的特殊字元很少的時候不如直接用取代的方式來處理

$msg = ereg_replace("%u263B", "", $msg);
雖然笨,但有效。
本篇文章回覆於2007-02-27 09:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

giu
捐贈 VP 給 giu 檢舉此回應
那是否文字要逐字檢查是否有特殊編碼~
要怎麼寫呢??
我目前是使用escape來編碼~然後用unescape解碼~文字檔ㄝ是ANSI格式
但這樣看似可以,但是所有的字,不管是中文還是特別編螞都會變成%unnnn 這一類編碼
這樣我文字檔就會都是這種怪碼~造成日後管理不便
請問逐字檢查是否為特殊編碼要怎麼寫呢??
請高手幫忙我!!謝謝
本篇文章回覆於2007-02-27 11:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

KEN
檢舉此回應
堅持使用 BIG5, 似乎並不見得有什麼好處, 那為什麼要堅持使用 BIG5?

而且你又要求「可以存成中文,日文,各國語言」, 這種事情本來就不該交給 BIG5 來做了。
本篇文章回覆於2007-02-27 12:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

溫子
捐贈 VP 給 溫子 檢舉此回應
因該是舊有資料都是 Big5 的,沒有絕對的把握完全 UTF8 化,才會有這樣的顧慮~~~
本篇文章回覆於2007-02-27 12:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

asakous
檢舉此回應
在 jacascript 用 escape 針對 中文字作編碼。

在php端用這個function 解碼
以下程式來至 http://pure-essence.net/archives/2005/03/29/javascript-unescape-php-function/



function utf8RawUrlDecode ($source) {
$decodedStr = "";
$pos = 0;
$len = strlen ($source);
while ($pos < $len) {
$charAt = substr ($source, $pos, 1);
if ($charAt == '%') {
$pos++;
$charAt = substr ($source, $pos, 1);
if ($charAt == 'u') {
// we got a unicode character
$pos++;
$unicodeHexVal = substr ($source, $pos, 4);
$unicode = hexdec ($unicodeHexVal);
$entity = "&#". $unicode . ';';
$decodedStr .= utf8_encode ($entity);
$pos += 4;
}
else {
// we have an escaped ascii character
$hexVal = substr ($source, $pos, 2);
$decodedStr .= chr (hexdec ($hexVal));
$pos += 2;
}
} else {
$decodedStr .= $charAt;
$pos++;
}
}
return $decodedStr;
}
本篇文章回覆於2007-02-27 14:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

giu
捐贈 VP 給 giu 檢舉此回應
asakous 的方式我之前就試過了~

它會把%u6211%u662F%u8C46%u8C46 這類編碼
全部轉成
&amp;#25105;&amp;#26159;&amp;#35910;&amp;#35910;

意思就是中文的"我是豆豆"

這樣整篇文字檔亂碼只能說是萬穿秋水~不可行


我所想要的就是把有"特殊字元"的符號轉碼成"& #9829"這一類碼
但是中文字不轉,所以才問高手是否有方式可以實現

但還是謝謝asakous 的幫忙
本篇文章回覆於2007-02-27 14:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

KEN
檢舉此回應
那就轉成 UTF8 吧!
長痛不如短痛....
本篇文章回覆於2007-02-27 14:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

asakous
檢舉此回應
去網上下中載 php 的 big5 class 我這裡用的是 0.22 版
然程在程式中
$msg=utf8RawUrlDecode($msg);
$msg = ereg_replace('♥', "", $msg);
$msg = ereg_replace('♣', "", $msg);
$msg=big5_deunicode( $msg);#big5 class 提供的

我用 sajax 裡的 example (example_wall.php)程式是可以達到你的要求的

<span style="color:#a86a27">2007-02-27 01:57:05</span> .♥ ♣ ♧ ☻ 這一類特殊符號編碼,可以正常存進文字檔,且存入的樣式如。 <br>
<span style="color:#a86a27">2007-02-27 03:03:49</span> .煄@琚@  這一類特殊符號編碼, <br>

本篇文章回覆於2007-02-27 15:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
回應

asakous
檢舉此回應
樓上的code無法正確顯示,這裡才是我要表達的

本篇文章回覆於2007-02-27 15:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
回應

asakous
檢舉此回應
樓上的還是錯,又被轉了

$msg = ereg_replace('& # 9 8 2 9 ;', "", $msg);
本篇文章回覆於2007-02-27 15:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
作者回應

giu
捐贈 VP 給 giu 檢舉此回應
不行嗎??真麻煩
如果會的人~可以達到我的要求的高手們~
可以報價給我。
請寄信到giu1909@yahoo.com.tw

本篇文章回覆於2007-02-27 17:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   

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