Метод разделения Javascript: специальные символы - PullRequest
0 голосов
/ 31 декабря 2011

Я немного поболтал на своем сайте. Я хочу, чтобы пользователь мог сделать это: Когда он вводит некоторые специальные символы, такие как :P, отображается значок Я делаю это с помощью этого кода:

chat_icons=new Array();

$(".chat_icons img").each(function(index){
    chat_icons[index]=$(this).attr("title");
});

$.each(chat_icons, function(index, value) { 
    var msg_array=new Array();
    msg_array=message.split(value);
    message="";

    for(j=0;j<msg_array.length;j++){
        message+=msg_array[j];
        url=index+1;
        img_msg="<img src=\"/apps/chat/icons/"+url+".png\" title=\""+value+"\" />";
        message+=img_msg;
    };

    message=message.substr(0,message.length-img_msg.length);
});

Этот код работает довольно хорошо. Второе, что я хочу сделать, - это когда пользователь чата набирает URL-адрес YouTube, и будет показана ссылка. Я пытаюсь сделать это с этим:

msg_array=new Array();
msg_array=message.split("http://www.youtube.com/watch");
message="";

for(j=0;j<msg_array.length;j++){
    if(j / 2==0){
        message+=msg_array[j];
    }
    else {
        youtube_array=new Array();
        youtube_array=msg_array[j].split(" ");
        message+="<a href=\"http://www.youtube.com/watch"+youtube_array[0]+"\" target=\"_blank\">http://www.youtube.com/watch"+youtube_array[0]+"</a> ";
        for(k=1;k<youtube_array.length;k++){
            message+=youtube_array[k]+" ";
        }
    }
}

Этот код дает мне следующие результаты:

http:/ /www. youtube.com/ watch?v=some_id -->works
http:/ /www. youtube.com /watch?v=some_id chat text chat text     
http://www.youtube.com/watch?v=some_id ---> works
http:/ /www. youtube.com/ watch?v=some_id&feature=something -->don't work
http:/ /www. youtube.com/ watch?v=some_id&feature=something anything else --> doesn't work

Последние 2 примера дают мне этот код <a href="http:/ /www. youtube.com/watch?v=some_id">http:/ /www.youtube.com /watch?v=some_id</a>

Так что у меня проблемы со спецсимволами. Как я могу решить эту проблему?

Последнее, что я хочу спросить, это то, что я не хочу, чтобы пользователь делал инъекции JavaScript / HTML. Единственные способы, которыми я хочу, - это два, которые я сказал выше. Пример: если пользователь вводит </body>, я не вижу его, потому что я использую $(".message").html(...).

Если я использую .text(), я решаю последнюю проблему, но не вижу изображения и ссылки на YouTube.

Я сократил youtube_url, потому что система считает меня спамером.

jsfiddle код: http://jsfiddle.net/Fb9kA/1/

Символ & URL-адреса YouTube перепутан с data: "name="+$(".chat_username").val()+"&message="+$(".chat_text").val(),

Я исправил это так: data: "name="+escape($(".chat_username").val())+"&message="+escape($(".chat_text").val()),

...