首頁 > ActionScript, FLEX, PHP, 程式設計, 網頁設計 > FLEX on PHP , use AMFPHP 中文 UTF-8 編碼的對話

FLEX on PHP , use AMFPHP 中文 UTF-8 編碼的對話

2009年2月22日  瀏覽次數 : 6,998

本來以為 Remoting 的傳值應該不會太難,不過就是字串來字串去,至少在 ColdFusion 是這樣的,不用擔心太多,不過沒想到 AMFPHP 預設是不支援中文的,因此我又因為這樣在網海上載浮載沉了,記錄一下自己遇到的問題,不過還好 PHP 的搜尋資料很豐富。

 silhouettes

在 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

image

之後再選取 Resource 將 text file encoding 更改為 UTF-8 之後我們就可以開始寫專案了。

image

其實只是兩個小部分,不過剛接觸 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>

範例成果 :

image

Random Posts

Loading…

:: 把這篇好文推到書籤網站與更多人分享吧 ::
  • funp
  • Hemidemi
  • YahooKimo
  • Google
  • udn
  • Haohao
  • Live

相關文章 :

Ausir ActionScript, FLEX, PHP, 程式設計, 網頁設計 , , , , ,

  1. shingo
    2009年2月22日21:47 | #1

    憑一下我薄弱的印象,iconv這個東東要使用的話,
    得用phpinfo看一下module有沒有iconv這個函式,
    沒的話,就把這個module加進去吧..@@”

  2. 2009年2月22日22:00 | #2

    查一下我的 phpinfo()

    iconv
    iconv support enabled
    iconv implementation “libiconv”
    iconv library version 1.11

    所以我應該也可以用 iconv 編碼了~

  3. 2009年2月23日13:44 | #3

    真是太強了ㄚ…..佩服 佩服

  4. 2009年2月23日14:10 | #4

    有空也試試看吧

  5. Jse
    2009年2月28日03:42 | #5

    哇!原來是Amfphp的問題喔,終於解決了~~感謝大大^^

  6. 2009年3月1日01:03 | #6

    嗯~ 如果有幫助到你~ 我很開心

  7. lan
    2009年6月17日12:11 | #7

    請問 依照測試我可以得到正常的中文
    可是加上mysql會有錯誤也
    請問為什麼 有什麼辦法解決

  8. 2009年6月17日13:37 | #8

    @lan

    因為資料的部分也要設定讀取編碼 UTF-8 喔~~
    不要忘記了!

  9. lan
    2009年6月18日07:09 | #9

    恩 我有加校對 utf8_unicode_ci 可是 螢幕顯示正確
    可是資料庫裡是一堆亂碼 @@ 謝謝

  10. 2009年6月18日12:11 | #10

    @lan

    寫入資料庫或是讀出資料庫
    $db->query ( “SET NAMES ‘utf8′” );
    不要忘記這句話捏~

  11. lan
    2009年6月18日16:45 | #11

    哇 成功了 終於不是亂碼了
    謝謝

  12. 2009年6月18日18:12 | #12

    @lan

    不會阿~
    小問題而已!!~

  13. 稀飯
    2009年9月17日15:37 | #13

    您好
    我照著你的方式修改
    可是還是出現亂碼
    以下是我的php碼
    $db_selected = mysql_select_db(”pcm”,$db);
    $sql = “select * from user_info”;
    $result = mysql_query($sql,$db);
    mysql_close($db);
    return $result;

    請問我要怎麼修改?

  14. 稀飯
    2009年9月17日16:46 | #14

    再加一個問題
    就是我欄位資料中文出現是”????”
    這應該是亂碼吧?
    請您解惑一下

  15. 2009年9月17日16:50 | #15

    查詢前請先定義 MYSQL 編碼原則

    mysql_query(”SET NAMES utf8″, $db);

  16. 稀飯
    2009年9月19日10:55 | #16

    @Ausir
    謝謝你 解決了!!

  17. 2009年9月21日11:20 | #17

    @稀飯

    解決就好 ^_^

  18. seamonkey
    2010年1月6日23:34 | #18

    謝謝你!!看你的文章解決好多問題!!
    太感謝拉~~~~

  19. 2010年1月7日00:10 | #19

    @seamonkey

    是你不嫌棄啦~
    只是分享一些處理的過程而已

    謝謝

  20. 2010年4月20日18:04 | #20

    太谢谢你了,终于解决了,
    网上都是说改gateway,没人说php页面的代码,我也用记事本另存为utf-8格式的了,但brower报错了,后来用dreamweaver重新加载了utf-8编码就成功了!!!!!!!!!!!!!!!!!!!!
    YE!!!!!!!!
    :)

  21. 2010年6月23日01:48 | #21

    請問一下喔!!~
    我是FLASH連接PHP,
    但FLASDH執行時出現以下錯誤

    Error #2044: 未處理的 NetStatusEvent:。 level=error, code=NetConnection.Call.BadVersion
    at login_fla::MainTimeline/login_fla::frame1()

    我有去gateway.php 的資料有按照你上面打的,可是還是出現一樣的東西ㄝ!!
    為什麼??可以麻煩撥空幫我解答嗎?

  22. article
    2010年8月11日02:14 | #22

    我的問題跟上面大大一樣
    照你的方法改了
    結果還是出現這行
    Error #2044: 未處理的 NetStatusEvent:。 level=error, code=NetConnection.Call.BadVersion
    at login_fla::MainTimeline/login_fla::frame1()
    跪求解答~~

  23. 2010年8月15日21:01 | #23

    @article

    看情況是說連線有問題
    可能是 amfphp 沒有正確的回應

  24. @begigo
    2011年3月23日20:58 | #24

    我也是 怎麼半

  1. 本篇文章目前尚無任何 trackbacks 和 pingbacks。