FLEX on PHP , use AMFPHP 中文 UTF-8 編碼的對話
本來以為 Remoting 的傳值應該不會太難,不過就是字串來字串去,至少在 ColdFusion 是這樣的,不用擔心太多,不過沒想到 AMFPHP 預設是不支援中文的,因此我又因為這樣在網海上載浮載沉了,記錄一下自己遇到的問題,不過還好 PHP 的搜尋資料很豐富。
在 AMFPHP 傳值的部分會遇到的問題就是,AMFPHP 預設是不支援中文的,而網路上的資料又眾說紛紜,而且也沒有說得很詳細,能顯示中文的編碼有 BIG-5 與 UTF-8 ,不過 UTF-8 是萬國編碼,所以未來如果程式內有用到日文或是簡體都可以正常顯示,為了一勞永逸我們就把編碼改成 UTF-8 吧,首先我們必須要找到 amfphp 資料夾內的 gateway.php 並且將其中一行的
1 2 | $gateway->setCharsetHandler( "utf8_decode", "ISO-8859-1", "ISO-8859-1" ); |
更改為
1 2 | $gateway->setCharsetHandler("utf8_decode", "UTF-8", "UTF-8"); |
並且存檔,不過也有人將前面的 utf8_decode 改成 iconv ,不過因為我也不是很了解這個編碼的設定,就原諒我的不求甚解吧,暫時我就不動它了,在改好了 gateway.php 之後並不代表這樣就完成了,這時候你去讀取 PHP 的資料應該還是讀到一堆亂碼,而網路上似乎也沒人提到這點,不過因為這個部份我之前在寫 FLEX 的 XML 檔案就遇過了,其重點就是要顯示 UTF-8 你的 PHP 檔案也必須儲存成 UTF-8 的格式,因此我們用之前文章提過的 PHP IDE 工具 PDT 來設定 PHP 儲存編碼格式,如果你是用 DreamWeaver 編寫 PHP 的話預設應該就是儲存 UTF-8 格式了。點選 Project –> properties
之後再選取 Resource 將 text file encoding 更改為 UTF-8 之後我們就可以開始寫專案了。
其實只是兩個小部分,不過剛接觸 PHP 的我差點被搞死 XD ,接下來我們把 PHP 與 FLEX 的程式碼打好就可以用中文與 PHP 溝通囉。
services\app\hello.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php class hello{ function sayhello($remoteObject){ //定義接收資料 //因為 FLEX 是把所有的資料都包成一個 Object 過來 //FLEX 傳入 Object 會被轉成一個 組合陣列 associative Array //所以我們要分別取出我們要的資料 $name = $remoteObject["name"]; $job = $remoteObject["job"]; return "你叫 『".$name."』,職業是『".$job."』"; } } ?> |
hello.mxml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" fontSize="16">
<mx:Script>
<![CDATA[
private function clickHandler():void{
var obj:Object = new Object();
//name與job對應的是 PHP 接收的欄位
obj.name = this.userName.text;
obj.job = this.userJob.text;
this.ro.sayhello(obj);
}
]]>
</mx:Script>
<mx:TextArea text="{this.ro.sayhello.lastResult}" width="320" height="49"/>
<mx:Form width="308" height="113">
<mx:FormItem label="名字">
<mx:TextInput id="userName"/>
</mx:FormItem>
<mx:FormItem label="職業">
<mx:TextInput id="userJob"/>
</mx:FormItem>
</mx:Form>
<mx:Button label="送出" click="clickHandler()"/>
<mx:RemoteObject id="ro" destination="amfphp" source="app.hello"/>
</mx:Application> |
範例成果 :

Random Posts
Loading…
相關文章 :
- FLEX on PHP , use AMFPHP remoting
- FLEX on PHP , use AMFPHP 取得資料庫資料
- 使用 AMFPHP 1.9 上傳 bytearray 檔案,不需要使用 FileReference
- FLEX on PHP , 使用 ZendAMF remoteObject
- FLEX on PHP , ZendAMF 設定讓 CLASS 更方便
ActionScript, FLEX, PHP, 程式設計, 網頁設計









憑一下我薄弱的印象,iconv這個東東要使用的話,
得用phpinfo看一下module有沒有iconv這個函式,
沒的話,就把這個module加進去吧..@@”
查一下我的 phpinfo()
iconv
iconv support enabled
iconv implementation “libiconv”
iconv library version 1.11
所以我應該也可以用 iconv 編碼了~
真是太強了ㄚ…..佩服 佩服
有空也試試看吧
哇!原來是Amfphp的問題喔,終於解決了~~感謝大大^^
嗯~ 如果有幫助到你~ 我很開心
請問 依照測試我可以得到正常的中文
可是加上mysql會有錯誤也
請問為什麼 有什麼辦法解決
@lan
因為資料的部分也要設定讀取編碼 UTF-8 喔~~
不要忘記了!
恩 我有加校對 utf8_unicode_ci 可是 螢幕顯示正確
可是資料庫裡是一堆亂碼 @@ 謝謝
@lan
寫入資料庫或是讀出資料庫
$db->query ( “SET NAMES ‘utf8′” );
不要忘記這句話捏~
哇 成功了 終於不是亂碼了
謝謝
@lan
不會阿~
小問題而已!!~
您好
我照著你的方式修改
可是還是出現亂碼
以下是我的php碼
$db_selected = mysql_select_db(”pcm”,$db);
$sql = “select * from user_info”;
$result = mysql_query($sql,$db);
mysql_close($db);
return $result;
請問我要怎麼修改?
再加一個問題
就是我欄位資料中文出現是”????”
這應該是亂碼吧?
請您解惑一下
查詢前請先定義 MYSQL 編碼原則
mysql_query(”SET NAMES utf8″, $db);
@Ausir
謝謝你 解決了!!
@稀飯
解決就好 ^_^
謝謝你!!看你的文章解決好多問題!!
太感謝拉~~~~
@seamonkey
是你不嫌棄啦~
只是分享一些處理的過程而已
謝謝
太谢谢你了,终于解决了,
网上都是说改gateway,没人说php页面的代码,我也用记事本另存为utf-8格式的了,但brower报错了,后来用dreamweaver重新加载了utf-8编码就成功了!!!!!!!!!!!!!!!!!!!!
YE!!!!!!!!
:)
請問一下喔!!~
我是FLASH連接PHP,
但FLASDH執行時出現以下錯誤
Error #2044: 未處理的 NetStatusEvent:。 level=error, code=NetConnection.Call.BadVersion
at login_fla::MainTimeline/login_fla::frame1()
我有去gateway.php 的資料有按照你上面打的,可是還是出現一樣的東西ㄝ!!
為什麼??可以麻煩撥空幫我解答嗎?
我的問題跟上面大大一樣
照你的方法改了
結果還是出現這行
Error #2044: 未處理的 NetStatusEvent:。 level=error, code=NetConnection.Call.BadVersion
at login_fla::MainTimeline/login_fla::frame1()
跪求解答~~
@article
看情況是說連線有問題
可能是 amfphp 沒有正確的回應
我也是 怎麼半