【问题标题】:JavaScript htmlentities FrenchJavaScript htmlentities 法语
【发布时间】:2011-06-21 09:06:01
【问题描述】:

我有一个 .NET MVC 页面,其中包含每个项目的列表 <%: %> rel 中的编码描述。 我希望能够使用包含我的搜索查询的rel 搜索所有项目。

其中一个字段的值为 htmlentities rel='Décoration'

我在搜索框中输入“装饰”,让 jQuery 搜索所有具有包含 (indexOf != -1) 值的 'rel' 属性的元素:

没有结果!

为什么?因为Décoration != Décoration

比较这两者的最佳解决方案是什么? (必须适用于所有特殊重音字符,而不仅仅是é

附: (我在两边都尝试了 escape/unescape,还尝试了将其附加到 div 然后将其作为文本读取的技巧,这会替换危险的东西,但不会替换 é(它不必这样做,因为它在 utf 中有效-8 无论如何))

【问题讨论】:

  • 在搜索之前使用 Javascript 转义您的输入。见this question
  • 不要破坏源代码以避免不必要的格式。相反,使用{} 工具栏按钮将其标记为代码。这次我替你做了。
  • 为什么要匹配翻译后的字符串?你不能使用不会改变的标识符吗?
  • Humberto,我希望有一个内置的解决方案,但显然这并不存在。 Alvaro,感谢您的提示,我对 stackoverflow 很陌生。当我们讨论阿尔瓦罗时,我怎样才能将亨贝托的迷你评论标记为答案? Nekresh,不,我不能这样做
  • 您必须等待@Humberto 添加他的评论作为答案 - 然后您可以接受它。如果我们稍微戳他一下,他可能会明白这一点!

标签: javascript .net jquery model-view-controller unicode


【解决方案1】:

您可以解码 html 实体。 只需从HERE复制两个javascript方法

var decoded = 'Décoration';
var entity = html_entity_decode('Décoration');
console.log(decoded == entity);

【讨论】:

    【解决方案2】:

    由于é之类的都是html实体,所以可以用乱码设置一个临时div的html内容,用元素的文本内容取回解码后的字符串。浏览器会为你做解码工作。

    使用 jQuery:

    function searchInRel(needle) {
        return $('[rel]').filter(function(i,e) {
            var decodedText = $('<div/>').html(e.attr('rel')).text();
            return (decodedText.indexOf(needle) != -1);
        };
    }
    

    仅使用 DOM:

    function decodeEntities(text) {
        var tempDiv = document.getElementById('tempDiv');
        tempDiv.innerHTML = text;
        return tempDiv.textContent;
    }
    

    【讨论】:

      【解决方案3】:

      如果您使用 UTF-8 编码为您的网页提供服务,则您不需要为所有重音字符使用实体。问题解决了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多