Re: [請益] URI亂碼問題...

看板PHP作者 (新港解說營)時間15年前 (2010/04/17 02:05), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
後來google map版的大大告訴後有另一篇文章是問同樣的問題, ebliswu:php版4705篇 不過該篇有許多說法建議,而筆者參考其中一種可行的修改。 ※ 引述《lauw (新港解說營)》之銘言: : 不知道能不能問一點google map api的東西, : 最近想結合Mysql php googlemap,而官方有一個範例, : http://code.google.com/intl/zh-TW/apis/maps/articles/phpsqlinfo.html : 但是它沒考慮到用get方法傳中文字存到mysql時,造成亂碼。 : http://docs.google.com/present/view?id=dd6fgr97_1453g3s68dh : 因為其中用到google map api提供的GDownloadUrl(),只提供get,沒有post。 : 在phpsqlinfo_add.html這個網頁時,會先將使用者輸入的name、address編碼為URI : (使用encodeURIComplonent) : function saveData() { : var name = document.getElementById("name").value; : var name = encodeURIComponent(name); : var address = document.getElementById("address").value; : var address = encodeURIComponent(address); : var type = document.getElementById("type").value; : var latlng = marker.getPosition(); : 然後在另一個phpsqlinfo_addrow.php用get取得每個數的值。 : 但是在範例就沒有進行decode去把它URI還原成UTF-8。 原始範例中不用解碼 : $name = $_GET['name']; : $address = $_GET['address']; : $lat = $_GET['lat']; : $lng = $_GET['lng']; : $type = $_GET['type']; : http://docs.google.com/present/view?id=dd6fgr97_1453g3s68dh : 然後筆者將上面改成這樣, 如同buganini大大所說的,php會自動decoding把它還原UTF-8 …所以不用進行下面的解碼 $name = rawurldecode($_GET['name']; $name = mb_convert_encoding($name, "UTF-8"); $address = rawurlencode($_GET['address']); $address = mb_convert_encoding($address, "UTF-8"); 只要保留原始的上面範例的不用解碼的寫法,不用改。 : $lat = $_GET['lat']; : $lng = $_GET['lng']; : $type = $_GET['type']; : 不過這樣網頁它就無法將使用者文字存入mysql,卡住。 : 不知道那裡我想不清楚。 : 潛水很久了,初次發文,有許多不懂的地方,請多包涵。 後來可行的處理: 在$query之前加入mysql_query("SET NAMES 'UTF8'"); ................phpsqlinfo_addrow.php修改後原始碼-頭.................... 以上省略 // Insert new row with user data mysql_query("SET NAMES 'UTF8'"); $query = sprintf("INSERT INTO markers " . " (id, name, address, lat, lng, type ) " 以下省略 .....................修改後原始碼-尾............................. 將用於ASCII 語系轉URI的escape() 改成 適合大部分單一 URI 的編碼的encodeURIComponent() 外國人寫的範例有時真的不太考慮UTF-8…他們只用ASCII就夠了… ......................phpsqlinfo_add.html修改前原始碼-頭.................... 以上省略 function saveData() { var name = escape(document.getElementById("name").value); var address = escape(document.getElementById("address").value); var type = document.getElementById("type").value; var latlng = marker.getLatLng(); var lat = latlng.lat(); var lng = latlng.lng(); 以下省略 ......................修改前原始碼-尾.............................. ......................phpsqlinfo_add.html修改後原始碼-頭.................... 以上省略 function saveData() { var name = encodeURIComponent(document.getElementById("name").value); var address = encodeURIComponent(document.getElementById("address").value); var type = document.getElementById("type").value; var latlng = marker.getLatLng(); var lat = latlng.lat(); var lng = latlng.lng(); 以下省略 ......................修改後原始碼-尾.............................. 感謝諸位大大的熱心回答。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.122.218.68
文章代碼(AID): #1BoARszm (PHP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1BoARszm (PHP)