Article: Nhúng dữ liệu vào URL 798

actionscript, as, base64, flash, flex
ngocdaothanh.myopenid.com 149
Over 2 years ago

Khi lập trình flash để chạy trên web, bạn muốn nhúng chuỗi kí tự tiếng Việt vào link trong flash kiểu GET query? Nhu cầu rất giản đơn này hóa ra hơi phức tạp, chỉ vì xui xẻo bạn không đơn giản là người Anh hay Mỹ{#emotions_dlg.tongue_out}.

Bài viết này trình bày giải pháp dùng hệ cơ số 64.

Vấn đề

Nếu chỉ dùng package flash.net.URLVariables, link tạo ra hoặc đọc vào không chạy đúng trên cả 2 trình duyệt phổ biến là Firefox và Internet Explorer. Có lẽ trong nhóm làm ra Adode Flash không có người Việt Nam.

Giải pháp

Để giải quyết, ta dùng chiêu thức mã hóa dữ liệu bằng hệ cơ số 64, rồi mới ghép dữ liệu đã được mã hóa vào URL. Hệ cơ số 64 có đặc tính rất hay, xin đọc Wikipedia (bạn nào rảnh xin giúp tạo trang wiki tiếng Việt).

Giải thuật như sau:

  • Mã hóa: input -> unescape URL -> encode base64 -> output
  • Giải mã: input -> decode base64 -> escape URL -> output
public static function encode(str:String):String {
var v:URLVariables = new URLVariables();
v.x = str;
var ret:String = v.toString();
ret = ret.slice(2); // Remove "x="

var encoder:DataInURL = new DataInURL();
ret = encoder.encodeBase64(ret);
ret = StringUtil.trim(ret);
return ret;
}

public static function decode(str:String):String {
var decoder:DataInURL = new DataInURL();
var ret:String = decoder.decodeBase64(str);

var v:URLVariables = new URLVariables("x=" + ret);
ret = v.x;
return ret;
}

Đoạn mã trên cần 2 thứ phụ trợ:

  • Thư viện hỗ trợ hệ cơ số 64, ví dụ đây, đây.
  • Thư viện hỗ trợ loại bỏ kí tự trắng (khoảng trắng, tab, kí tự xuống dòng...), ở đầu và cuối chuỗi kí tự (trim), vì thường chuỗi tạo bởi thư viện trước có chứa kí tự xuống dòng, ví dụ as3corelib có sẵn trong Flex.

Lời bàn

Tuy tùy implementation của trình duyệt và web server cho GET request, thường chỉ có thể nhúng chừng một ngàn byte vào URL, nhưng tần này có lẽ quá đủ.

Chiêu thức này hoàn toàn có thể áp dụng cho những nền tảng khác ngoài ActionScript.

Comments

You must login to be able to comment

Uploaded files

No file uploaded yet

You must login to be able to upload

Nhà tài trợ:

Mọi người đều tự do viết bài, sửa bài của người khác, và bình luận ở trang web này. Bạn muốn chủ động tạo bài mới để chia sẻ kinh nghiệm với mọi người? Xin click link ở dưới.

Create new content