Re: [請益] URI亂碼問題...
後來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
討論串 (同標題文章)
PHP 近期熱門文章
PTT數位生活區 即時熱門文章