Chatbox

Các bạn vui lòng dùng từ ngữ lịch sự và có văn hóa,sử dụng Tiếng Việt có dấu chuẩn. Chúc các bạn vui vẻ!
05/01/2011 17:01 # 1
John_Lennon
Cấp độ: 7 - Kỹ năng: 7

Kinh nghiệm: 10/70 (14%)
Kĩ năng: 27/70 (39%)
Ngày gia nhập: 08/12/2009
Bài gởi: 220
Được cảm ơn: 237
Báo lỗi diễn đàn: Lỗi script encodeAspNet


Gửi BQT

Trong lúc chat, vô tình mình cần gõ 80%, nhưng thấy bị "đơ",
Mình vội soi code và phát hiện ra lỗi, à mà không phải lỗi mà là bug thuật toán.
Lỗi nằm ở chỗ thuận toán mã hóa kí tự ASCII sang mã Hex.
Cụ thể, lỗi phát sinh ở function replaceAll1(), được gọi bởi function aspneEncode()
(Chi tiết ở
http://forum.duytan.edu.vn/js/nt_script_util.js )

Giải thích rõ hơn,
ở function replaceAll1 () có chứa vòng lặp do while

function replaceAll1(find, replace, val)
{
    do {
        main = val;
        val = main.replace(find, replace)
    }
    while (val != main);
    return val
 }


Khi gọi function này ở function

function aspnetEncode(obj)
{
    obj = replaceAll1('%', '%25', obj);
 // .....
}


Như vậy, kí tự % sẽ được thay bằng %25
Nhìn vào function replaceAll1, dễ thấy, vòng do while sẽ lặp không-có-điểm-dừng, bởi dấu % được thay bởi %25,
kế đó lại thay thế dấu % trong %25 thành 1 %25 nữa, cho ra %2525, cứ như thế nó lại lặp tiếp, cho ra %252525, rồi %25252525.
Kết quả là không thoát khỏi vòng lặp dẫn đến bị treo trình duyệt.

Các bạn không tin thử gõ dấu % vào chatbox mà xem. À mà khuyến nghị là nếu fùng Firefox thì thử chứ dùng Chrome đừng thử :))

Thật ra cách giải quyết rất dễ. JavaScript đã hỗ trợ hàm encodeURIComponent() để mã hóa các kí tự ASCII rồi.
Có nghĩa là chỉ cần dùng 1 câu lệnh duy encodeURIComponent() sẽ giải quyết được toàn bộ mớ code lòng bòng trong file
http://forum.duytan.edu.vn/js/nt_script_util.js rồi. (à mà trong file này có vài function không liên quan đến encode :D)

Mình cũng đã demo hàm encodeURIComponent() ở
http://dinhkhanh.info/dtu.php các bạn có thể xem.

Rất mong BQT sửa gấp để "dân tình" chém gió mà không bị treo trình duyệt, hí hí.


Ngồi nhìn đời nơi cuối phố vắng...

 
Các thành viên đã Thank John_Lennon vì Bài viết có ích:
05/01/2011 17:01 # 2
TyLangTu
Cấp độ: 2 - Kỹ năng: 2

Kinh nghiệm: 15/20 (75%)
Kĩ năng: 11/20 (55%)
Ngày gia nhập: 13/11/2010
Bài gởi: 25
Được cảm ơn: 21
Phản hồi: Báo lỗi diễn đàn: Lỗi script encodeAspNet


gõ + thì sẽ thành %2b, cái này , có thể dùng 1 số lệnh khác thì có thể dẫn đến treo trình duyệt:D


 
Các thành viên đã Thank TyLangTu vì Bài viết có ích:
05/01/2011 17:01 # 3
John_Lennon
Cấp độ: 7 - Kỹ năng: 7

Kinh nghiệm: 10/70 (14%)
Kĩ năng: 27/70 (39%)
Ngày gia nhập: 08/12/2009
Bài gởi: 220
Được cảm ơn: 237
Phản hồi: Báo lỗi diễn đàn: Lỗi script encodeAspNet


Trích:
gõ + thì sẽ thành %2b, cái này , có thể dùng 1 số lệnh khác thì có thể dẫn đến treo trình duyệt:D
Một số chức năng nó không thể dùng mã ASCII được mà phải dùng mã hex nên mới cần encode.
Nó mã hóa để phân biệt giữa kí tự và phép toán á mà :D
Encode cũng thường gặp trong mã hóa cho đường dẫn url...
2b chính là mã hex của dấu + đó bạn ;) encode thêm % nữa là %2b
Hiện tại chỉ có bug ở dấu % thôi


Ngồi nhìn đời nơi cuối phố vắng...

 
Các thành viên đã Thank John_Lennon vì Bài viết có ích:
05/01/2011 18:01 # 4
John_Lennon
Cấp độ: 7 - Kỹ năng: 7

Kinh nghiệm: 10/70 (14%)
Kĩ năng: 27/70 (39%)
Ngày gia nhập: 08/12/2009
Bài gởi: 220
Được cảm ơn: 237
Phản hồi: Báo lỗi diễn đàn: Lỗi script encodeAspNet


 À mà chết, nếu dùng hàm encodeURIComponent()thì nó sẽ encode luôn kí tự tiếng Việt :))
Nhưng không sao, tạo 1 mảng các kí tự đặc biệt rồi thêm 1 lệnh if nữa là được á mà :D


Ngồi nhìn đời nơi cuối phố vắng...

 
Các thành viên đã Thank John_Lennon vì Bài viết có ích:
05/01/2011 22:01 # 5
TranVanVi
Cấp độ: 13 - Kỹ năng: 22

Kinh nghiệm: 28/130 (22%)
Kĩ năng: 106/220 (48%)
Ngày gia nhập: 22/04/2010
Bài gởi: 808
Được cảm ơn: 2416
Phản hồi: Báo lỗi diễn đàn: Lỗi script encodeAspNet


Cảm ơn ý kiến đóng góp của các bạn, BQT sẽ tiến hành fix lỗi sớm


Một Ngày Mai tốt lành

Fone number: 0905936799 - 0905746789
YMmail:
tranvvi@yahoo.com.vn

 
Các thành viên đã Thank TranVanVi vì Bài viết có ích:
Copyright© Đại học Duy Tân 2010 - 2024