Javascript变量包含纯文本,包括html标记

时间:2014-01-23 19:51:39

标签: javascript php jquery html

这是js代码

function startChatSession(){  
$.ajax({
  url: "chat.php?action=startchatsession",
  cache: false,
  dataType: "json",
  success: function(data) {

    username = data.username;

    $.each(data.items, function(i,item){
        if (item)   { // fix strange ie bug

            chatboxtitle = item.f;

            if ($("#chatbox_"+chatboxtitle).length <= 0) {
                createChatBox(chatboxtitle,1);
            }

            if (item.s == 1) {
                item.f = username;
            }

            if (item.s == 2) {
                $("#chatbox_"+chatboxtitle+" .chatboxcontent").append('<div class="chatboxmessage"><span class="chatboxinfo">'+item.m+'</span></div>');
            } else {
                $("#chatbox_"+chatboxtitle+" .chatboxcontent").append('<div class="chatboxmessage"><span class="chatboxmessagefrom">'+item.f+':&nbsp;&nbsp;</span><span class="chatboxmessagecontent">'+item.m+'</span></div>');
            }
        }
    });

此处+ item.m +包含纯文本

如果它包含html标签,那么它也会返回html标签

例如+ item.m +包含

<b>Hello</b>

我希望输出

你好

但我的输出与

相同
<b>Hello</b>

此代码在IM聊天中实现,我需要在聊天窗口中执行html代码。 。 .so请通过建议在这里获取html执行来帮助我

谢谢

4 个答案:

答案 0 :(得分:1)

在PHP方面,不要使用htmlentities()来编码您返回的内容。执行此操作时,服务器将分别返回字符<>的HTML代码&lt;&gt;

答案 1 :(得分:1)

您似乎正在从服务器接收编码文本。尝试在连接字符串之前在字符串上应用unescape()。

答案 2 :(得分:1)

似乎您有&lt;b&gt而不是真正的<br>,要解决此问题:

var itemText = item.m
    .replace(/&lt;b&gt;/g, '<b>')
    .replace(/&lt;\/b&gt;/g, '</b>');

然后在代码中使用itemText代替item.m,如下所示:

        var itemText = item.m
            .replace(/&lt;b&gt;/g, '<b>')
            .replace(/&lt;\/b&gt;/g, '</b>'); 
        if (item.s == 2) {
            $("#chatbox_"+chatboxtitle+" .chatboxcontent").append('<div class="chatboxmessage"><span class="chatboxinfo">'+itemText+'</span></div>');
        } else {
            $("#chatbox_"+chatboxtitle+" .chatboxcontent").append('<div class="chatboxmessage"><span class="chatboxmessagefrom">'+item.f+':&nbsp;&nbsp;</span><span class="chatboxmessagecontent">'+itemText+'</span></div>');
        }

如果你想对其他一些标签这样做:

<a href="chat.php">Hello</a>

你可以这样做:

var itemText = item.m
    .replace(/&lt;\/a&gt;/g, '</a>')
    .replace(/&lt;a/g, '<a')
    .replace(/&gt;/g, '>');

答案 3 :(得分:1)

解码HTML实体,使用.html jQuery函数解码实体

item.m = $('<div>').html(item.m).text(); 

但我建议你删除服务器端的实体,我发现你正在开发一个聊天,所以你最好删除任何HTML标签以解决安全问题,不知道你是如何处理这些消息的,但是用户有时可以进行跨站点脚本编写。