22

I have a page that is part of a backend CRM admin panel. On that page the HTML output comes from some PHP functions that I can't access. And that HTML automatically changes < and > into HTML encoded characters.

So there is a div that contains html tags like <br /> that is converted into &lt;b /&gt;

So I need to change it back to the HTML characters using only jQuery:

&lt; to <
&gt; to >

Is there a jQuery script I can use to replace those special characters with the corresponding symbols? This will mean my HTML tags will actually work and the HTML will being displayed properly on the screen?

I've tried removewith() but i can't make it work.

ADDED: The div that im trying to modify is this

<div style="font-size: 11px; width: 90%; font-family: Tahoma;" id="cotiz">&lt;strong&gt;Valuación&lt;/strong&gt; de InfoAuto: 35.500,00&lt;br /&gt; 
Cotización Seleccionada: Ninguna&lt;br /&gt; 
Allianz, Responsabilidad Civil: $205,25&lt;br /&gt; 
Allianz, Terceros Completos: $278,85 </div>
4
  • Just on the off chance, are you using .text() to insert the data instead of .html()? Commented Jul 22, 2011 at 0:54
  • possible duplicate of How do I find and replace HTML entities with jQuery? Commented Jul 22, 2011 at 0:54
  • @genesis - Please note the capitalization in the above comment. ;) Commented Jul 22, 2011 at 0:55
  • This is some nefarious stuff Commented Jan 29, 2015 at 20:09

11 Answers 11

24

Please try this

.replace(/&lt;/g, '<').replace(/&gt;/g, '>') 

to replace these characters globally. I tried this and works like a charm :)

Sign up to request clarification or add additional context in comments.

Comments

16

I have different solution then the conventional, and it will be applied to decode/encode html

Decode

var encodedString = "&lt;Hello&gt;";
var decodedText = $("<p/>").html(encodedString).text(); 
/* this decodedText will give you "<hello>" this string */

Encode

var normalString = "<Hello>";
var enocodedText = $("<p/>").text(normalString).html();
/* this encodedText will give you "&lt;Hello&gt;" this string

1 Comment

Do you have a plain javascript alternative?
12

The simplest thing to do would be

$('#test').each(function(){
    var $this = $(this);
    var t = $this.text();
    $this.html(t.replace('&lt','<').replace('&gt', '>'));
});

working edit/jsfiddle by Jared Farrish

6 Comments

Not quite. jsfiddle.net/XS5kY Note, I have fixed a couple of issues with the above for demo purposes.
I see that its working on that jsfiddle demo but its not working on my setup...the div reference is correct btw. What could be the problem?
@sebas: I have no idea. show us your whole #test element in your question
just posted the div that your jquery cant modify in my setup for some reason.
SORRY edited again the question pleae check the div now as it is exactly as i can see it in the html code with the special characters that i need to convert into < and >
|
5
$('#myDivId').text(function (i, text)
{
    return text.replace('&lt;', '<').replace('&gt;', '>');
});

Comments

4

if use underscore.js exist _.unescape(string)

Comments

4

Use $this.html('...'); instead $this.text('...');

Comments

3

Try This:-

var wrapper=$(".contentwrap").html();
  wrapper=wrapper.replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');
 $(".contentwrap").html(wrapper);

Comments

2

All of the above didn't really work for me because what I needed was something to replace all &lt; to < and &gt; to > , not only the first one. What I did was:

.split('&lt;').join('<').split('&gt;').join('>');

Just thinking out of the box here. It worked for me, I hope it does for you too.

Comments

0

I needed to step to find an H1 then parse the next element, because I wasn't able to use a specific ID like you did. Good tip!

$('#sscContent').find("h1").next().each(function(){
    var $this = $(this);
    var t = $this.text();
    $this.html(t.replace('&lt;','<').replace('&gt;', '>'));
});

Comments

-1

I made a small tool to covert HTML text containing < and > to &lt; and &gt;

So you can use this tool to convert your code.

I made it using simple replaceAll() method.

elem.replaceAll('&', '&amp;').replaceAll('<','&lt;').replaceAll('>', '&gt;')

1 Comment

OP wants to replace the other way around
-2

You can do it simply with php

<?php
$a =
 '<div style="font-size: 11px; width: 90%; font-family: Tahoma;" id="cotiz">&lt;strong&gt;Valuación&lt;/strong&gt; de InfoAuto: 35.500,00&lt;br /&gt; 
Cotización Seleccionada: Ninguna&lt;br /&gt; 
Allianz, Responsabilidad Civil: $205,25&lt;br /&gt; 
Allianz, Terceros Completos: $278,85 </div>';

$b = html_entity_decode($a);


echo $b;
?>

1 Comment

The question specifically says using jquery! Please read the question through first!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.