Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaScript htmlentities French

I have a .NET MVC page with a list of items that each have <%: %> encoded descriptions in the rel. I want to be able to search for all items with a rel that contains my search query.

One of the fields has a value with htmlentities rel='D&eacute;coration'

I type "Décoration" in the search box, let jQuery search for all elements that have a 'rel' attribute that contains (indexOf != -1) that value:

no results!

Why? because Décoration != D&eacute;coration.

What would be the best solution to compare these two? (Has to work for all special accented characters, not just &eacute;)

P.S. (I tried escape/unescape on both sides, also tried the trick to append it to a div and then read it as text, this replaces dangerous stuff, but doesn't replace é (it doesn't have to because it's valid in utf-8 anyway))

like image 366
Michiel Cornille Avatar asked Feb 04 '11 13:02

Michiel Cornille


2 Answers

Since the &eacute; and like are html entities, you can set the html content of a temporary div with the garbled string, and retrive the decoded string using the text content of the element. The browser will do the decoding work for you.

Using jQuery :

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

Using just the DOM :

function decodeEntities(text) {
    var tempDiv = document.getElementById('tempDiv');
    tempDiv.innerHTML = text;
    return tempDiv.textContent;
}
like image 79
Suzanne Soy Avatar answered Nov 08 '22 21:11

Suzanne Soy


If you serve your pages with UTF-8 encoding, you won't need to use entities for all the accented characters. Problem solved.

like image 30
Spudley Avatar answered Nov 08 '22 20:11

Spudley