I retrieve an HTML string from the database and needed to change all
s’ to white spaces
<p> C G Am</p><p>C G Am F</p>
so I wanted the change the to whitespaces, so i can use in a pre element
<pre></pre>
as following
<pre > //here i needed to insert the converted string //for example C G Am F C G F C/E Dm C </pre>
I need a solution to do this either in PHP, JS / Jquery
Please Help me through out this
I have tried
$nbsp = html_entity_decode(" "); $s = html_entity_decode("<p> C G Am</p>"); $s = str_replace($nbsp, " ", $s);
I tried This but this replaces all nbsp’s to one white space
Advertisement
Answer
Even inside <pre>
tags, HTML tags will be turned into DOM elements and the browsers will collapse multiple spaces into one. Here is an example of this behavior.
<pre> <h1>A heading</h1> <p>some paragraph</p> <table> <tr> <td>a table</td> <td>a table</td> <td>a table</td> <td>a table</td> </tr> </table> </pre>
Also, in order to replace multiple occurrences of the search string, you’ll have to use a regular expression in the first parameter of .replace()
.
Solution
This uses a rudimentary way to replace HTML tags in the string, but that’s outside the scope for this question. I added it to be able to reproduce your case and be able to provide a solution.
const s = '<p> C G Am</p><p>C G Am F</p>'; let result = s.replace(/(<p>|<br(.*)>)/gi, "rn") // replace starting paragraph tags and line break tags with actual line breaks .replace(/(</p>)/gi, "n") // replace closing paragraph tags with nothing .replace(/(<(.*)>)/gi, "") // discard any other HTML tags .replace(/ /gi, ' '); // replace non-breaking space entities with actual spaces document.querySelector('#tabs').innerText = result; // insert
<pre id="tabs"> </pre>