chaensel
chaensel

Reputation: 183

PHP preg_replace  

I'm stuck with this one...

I insert some data into a database table which comes from a form. Sometimes, this data contains html, so I do

$note = htmlentities(mysqli_real_escape_string($this->db, $_POST['note']));

I then store the $note in my database. When retrieving my notes, I check whether there is html code in it, and if there is, I want to have it highlighted using highlight_string(). That part works like a charm. Now here's the problem:

I am displaying the highlighted string in a div container, but it's overflowing because the white spaces are being converted to  . I'm trying to remove those non-breaking spaces and replace them with a simple space so the highlighted string will be contained in the div. I have tried this so far:

$note = html_entity_decode($note);
$note = highlight_string($note);
$note = preg_replace('/ /', '', $note);  

I have also tried $note = str_replace(' ', ' ', $note);, to no avail.

Any help is very much appreciated! Thanks :)

Upvotes: 0

Views: 3856

Answers (2)

Naincy
Naincy

Reputation: 2943

You can try with strip_tags in place of htmlentities

string strip_tags( string $str [, string $allowable_tags ] )

In allowable_tags, you can define the html you want to allow in string. If null it will not allow any html to get apply.

Reference : https://www.php.net/manual/en/function.strip-tags.php

Upvotes: 0

ljacqu
ljacqu

Reputation: 2180

I think the problem is quite simply that highlight_string() is outputting its result immediately, rather than saving it to $note.

Instead, please try the following:

$note = html_entity_decode($note);
$note = highlight_string($note, true);
$note = str_replace(' ', ' ', $note);

The difference in my code is that I use highlight_string($note, true) with the second parameter set to true. The docs shed some light about the function's behavior:

mixed highlight_string ( string $str [, bool $return = false ] )

Return
 Set this parameter to TRUE to make this function return the highlighted code.

The regex function you have in your code block might work, but since this is a simple replacement, it will suffice to use str_replace in this case, as you have tried.

Upvotes: 2

Related Questions