代码之家  ›  专栏  ›  技术社区  ›  philipp

jquery uri encode(char&).html()属性值

  •  1
  • philipp  · 技术社区  · 14 年前

    为了解决这个问题,我读了很多HTML编码文章。我只是设法找到了它。 基本上,我用jquery在嵌入标记上设置了一个属性。在浏览器中一切正常。 不,我想读取HTML本身,将结果作为输入字段的值添加,以允许用户复制并通过它。

    这个 问题 是.html()函数(也是plain js.innerhtml)转换 “和”字符 进入之内 “&”(不带空格) . 使用differen html编码器功能没有什么不同。我需要嵌入代码中的“&”字符。
    代码如下:

    HTML:

    <div id="preview_small">
    <object><embed src="main.swf?XY=xyz&YXX=xyzz"></embed>
    </object></div>
    

    jQuery:

    $("#preview_small object").clone().html();
    

    收益率

    ... src=main.swf?XY=xyz&amp;YXX=xyzz ...
    

    当我使用:

    $("#preview_small object").clone().children("embed").attr("src");
    

    收益率

    main.swf?XY=xyz&YXX=xyzz
    

    任何关于如何直接获取“&”字符的想法,在获得带有.html()的字符串后不使用regex

    1 回复  |  直到 14 年前
        1
  •  1
  •   bobince    14 年前

    我需要 & 嵌入代码中的字符。

    不,你没有。这个:

    <embed src="xyz&YXX=xyz"></embed>
    

    是无效的HTML。它在浏览器中起作用,因为它们试图修复像这样的错误,但只要字符串 YXX 不匹配HTML实体名。你不想依赖它。

    这是:

    <embed src="xyz&amp;YXX=xyz"></embed>
    

    是正确的,适用于任何地方,并且是您应该告诉用户复制和粘贴的版本。

    attr("src") 收益率 xyz&YXX=xyz

    是的,这是该属性的基础值。属性值和文本内容几乎可以直接包含任何字符。只有在需要对它们进行编码时,才会对它们进行HTML序列化:

    <div title="a&lt;b&quot;&amp;c&gt;d">
    
    $('div').attr('title') -> a<b"&c>d
    

    我想读取HTML本身以将结果作为输入字段的值添加

    <textarea id="foo"></textarea>
    
    $('#foo').val($('#preview_small object').html());
    

    但是要注意的是 innerHTML / html() 不是在HTML的任何特定固定方言中,特别是IE可能会给您提供代码,尽管浏览器通常可以理解,但在技术上也是无效的:

    $('#somediv').html('<div title="a/b"></div>');
    $('#somediv').html() -> '<DIV title=a/b></DIV>' - missing quotes
    

    因此,如果您知道要向用户呈现的HTML的特定格式,您最好自己生成它:

    function encodeHTML(s) {
        return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/"/g, '&quot;');
    }
    
    var src= 'XY=xyz&YXX=xyzz';
    $('#foo').val('<embed src="'+encodeHTML(src)+'"><\/embed>');
    

    (The \/ 在结束标记中,这样就不会被误认为是 <script> 阻止,以防你在其中。)