Я немного поболтал на своем сайте.
Я хочу, чтобы пользователь мог сделать это:
Когда он вводит некоторые специальные символы, такие как :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()),