Article:
Nhúng dữ liệu vào URL
798
ngocdaothanh.myopenid.com 149Over 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ỹ
.
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.
actionscript, as, base64, flash, flex
149