Problems with special Avascript characters

Asked

Viewed 489 times

2

I am using the script below and working almost perfectly were not a however, it is a search script, when the user type "?" (interrogation) in the search appears the following expression "%3F" (percentage, three and F), some other characters like ! , @, # also present error

How can I fix this?

Site where I use: http://leituracrista.com/indice/

As it is a site of questions and answers would need a lot to solve this, because if the user type a "?" would hinder the search. remembering that the page is already with meta charsetUTF-8. Thank you.

Follow code in Java:

function removeAcento(text){
    text = text.toLowerCase();
    text = text.replace(new RegExp('[ÁÀÂÃ]', 'gi'), 'a');
    text = text.replace(new RegExp('[ÉÈÊ]', 'gi'), 'e');
    text = text.replace(new RegExp('[ÍÌÎ]', 'gi'), 'i');
    text = text.replace(new RegExp('[ÓÒÔÕ]', 'gi'), 'o');
    text = text.replace(new RegExp('[ÚÙÛ]', 'gi'), 'u');
    text = text.replace(new RegExp('[Ç]', 'gi'), 'c');
    return text;
}

function kw_list(){
    this.keywords = new Array();
    this.num_words = 0;
    this.query = '';
    this.original_query = '';
    this.query_length = 0;
    this.possible_points = 0;
    this.multiple = points_title + points_keywords + points_description;
    this.get_words = get_query;
    this.no_query = no_query_found;
}
function get_query(){
    this.query = top.location.search.substring(top.location.search.indexOf('=') + 1);
    while ((the_plus = this.query.indexOf('+', 0)) != -1){
        this.query_length = this.query.length;
        this.query = this.query.substring(0, the_plus) + ' ' + this.query.substring(the_plus + 1);
    }
    this.original_query = decodeURI(this.query);
    this.query = removeAcento(this.original_query);
    this.query_length = this.query.length;
    if (this.query != ''){
        var query_pointer = 0;
        var end_word = 0;
        var at_end = 0;
        while (this.num_words <= max_keywords - 1 && !at_end){
            end_word = this.query.indexOf(' ', query_pointer);
            if (end_word == query_pointer) query_pointer++;
            else {
                if (end_word >= this.query_length - 1) at_end = 1;
                if (end_word != -1){
                    this.keywords[this.num_words] = removeAcento(this.query.substring(query_pointer, end_word));
                } else {
                    this.keywords[this.num_words] = this.query.substring(query_pointer, this.query_length);
                    at_end = 1;
                }
                this.num_words++;
                if (query_pointer != -1) query_pointer = end_word + 1;
                if (query_pointer > this.query_length - 1) at_end = 1;
            }
        }
        if (this.num_words == 0) return 0;
        else {
            this.possible_points = this.multiple * this.num_words;
            return 1;
        }
    } else return 0;
}

function no_query_found(){
    document.writeln('<link rel="stylesheet" href="gp.css">');
    document.writeln('<CENTER><P>Pesquisa em branco.</P></CENTER>');
}

function entry(url, title, keywords, description){
    this.url = url;
    this.title = title;
    this.keywords = keywords;
    this.description = description;
    this.points = 0;
    this.search_entry = find_keyword;
    this.print_entry = print_result;
}

function find_keyword(the_word){
    var the_title = removeAcento(this.title);
    var the_keywords = removeAcento(this.keywords);
    var the_description = removeAcento(this.description);
    if (the_title.indexOf(the_word) != -1) this.points += points_title;
    if (the_keywords.indexOf(the_word) != -1) this.points += points_keywords;
    if (the_description.indexOf(the_word) != -1) this.points += points_description;
}

function print_result(possible_points){
    document.writeln('<CENTER><P>' + this.title + '' + this.description + '</P></CENTER>');
}

function no_entry_printed(the_query){
    document.writeln('<link rel="stylesheet" href="gp.css">');
    document.writeln('<CENTER><P> Não há ocorrências para <U><B>' + the_query + '</B></U>.</P></CENTER>');
}

function print_intro(the_query){
    document.writeln('<CENTER><P>Pesquisando por <U><B>' + the_query + '</B></U>:</P></CENTER>');
}

function begin_search(){
    var key_list = new kw_list();
    var entry_printed = 0;
    if (!key_list.get_words()) key_list.no_query();
    else {
        var counter = 0;
        var counter2 = 0;
        for (counter = 0; counter < entry_num; counter++){
            for (counter2 = 0; counter2 <= key_list.num_words - 1; counter2++){
                the_entries[counter].search_entry(key_list.keywords[counter2]);
            }
        }
        for (counter = key_list.possible_points; counter > 0; counter--){
            for (counter2 = 0; counter2 < entry_num; counter2++){
                if (counter == the_entries[counter2].points){
                    if (entry_printed != 1){
                        entry_printed = 1;
                        print_intro(key_list.original_query);
                    }
                    the_entries[counter2].print_entry(key_list.possible_points);
                }
            }
        }
        if (!entry_printed) no_entry_printed(key_list.original_query);
    }
}

the_entries = new Array();
  • 1

    Forehead to wear this.original_query = decodeURIComponent(this.query);

  • testing here...

  • 1

    @Sergio, very good guy! Works like a Charm! Thank you very much!

1 answer

3


The IUU decodes no characters as ; / ? : @ & = + $ , #,you have to use the decodeURIComponent.

console.log(
  decodeURI("%3F"), // vai dar "%3F"
  decodeURIComponent("%3F") // vai dar "?"
);

Browser other questions tagged

You are not signed in. Login or sign up in order to post.