简体   繁体   中英

How to save a text string with line breaks to a MySQL database text field using PHP?

In SugarCRM I have a Textarea field that I am trying to save data to with line breaks.

IF I insert <br> tags, then they show up as text break tags. If I try something like \\n then it also shows up as text.

Now if I go into SugarCRM and edit a record, I can type in text and make a linebreak. Save the record and view it again and the line breaks show up as I would want them to!

I am trying to save data with line breaks to the same field from a remote API script.

I went into the Database with phpMyAdmin to see how the field looked and here it is...

The first 3 lines have proper line breaks which I made inside SugarCRM editing a record manually.

The line after are from my remote API script where I had saved <br> tags into the string.

Line 1 Text: ghfghdf
Line 1 Color: #0064FF
Line 1 Font: Architect
Line 2 Text: fghfg<br /> Line 2 Color: #9F00FF<br /> Line 2 Font: Belshaw<br /> Line 3 Text: fghdhdhdf<br /> Line 3 Color: #FF5000<br /> Line 3 Font: Benguiat<br />

Any ideas how I can make my PHP code save a string to this field and have line breaks when viewing it in the database just like the first 3 lines above are?

As suggested in comments , this kind of issue tends to be related to the fact that in single quoted strings :

To specify a literal single quote, escape it with a backslash (\\). To specify a literal backslash, double it (\\\\).

All other instances of backslash will be treated as a literal backslash: this means that the other escape sequences you might be used to, such as \\r or \\n , will be output literally as specified rather than having any special meaning.

but in double quoted strings :

PHP will interpret more escape sequences for special characters

sequence : \\n then having the meaning of linefeed (LF or 0x0A (10) in ASCII)

So echo '\\n' will print \\n while echo "\\n" will allow you to have a new line as excepted.

And of course, you also can use PHP_EOL to make it cross OS.

When attempting to store data that has line breaks, you want to use the nl2br() function inside of php before you store the data. I had the same issues before and after months and months of trying different things to get it to work right on a client's site, it was on SO that I found the answer one day.

The key is to convert the data by using nl2br() before you store it.

Hope this helps.

Use PHP_EOL instead of <br/ > or \\n

eg

$array = array("a","b");
$string = implode(PHP_EOL , $array);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM