When I add text new line in textarea It displays "rn" while printing the text in tcpdf
For eg i have entered a text in textarea has
1.C++
2.java
While displaying the output it displays as
C++rnJava
How to remove rn from the text here is the code
$address= mysql_real_escape_string($_REQUEST["address"]);
<tr>
<td width="30%"></td>
<td width="70%" style="padding-left:500px; font-size:13px; font-weight:bold;">';
$html .= stripslashes(str_replace(array("\r","\n"),"", $address));
$html .= '</td>
How can I remove \r\n from printing
You should escape slashes and, i think, replace with space to don't make as one word
$html .= stripslashes(str_replace(array("\\r","\\n")," ", $address));
Related
I am creating a post_blog.php file where user will enter all fields one by one like post_title, post_author etc.
When user write post_text which contains many paragraphs and i get that text by using post method in php it displays me all value in plain text . it do not contain any paragraphs etc.
Here is the code :
<textarea rows="400" cols="100" name="post_text">
Enter post text here .. upto 5000 characters .
</textarea>
in php :
if()....
echo $post_text = $_POST['post_text'];
Demo Input in post_text:
Enter post text here
.. upto
5000
characters .
OUTPUT:
Enter post text here .. upto 5000 characters .
Expected OUTPUT :
Enter post text here
.. upto
5000
characters .
Your problem isn't in the php; Your problem is that HTML doesn't accept white spaces (line breaks, sapces, etc.) and display them as one space. There are some solutions:
Use the <pre> tag, which shows the text as-is:
<?php
...
echo '<pre>' . $post_text = $_POST['post_text'] . '</pre>';
Use the CSS white-space: pre; definition, which is excatly like the <pre> tag, except that it's can be applied to any element, and you cannot style a <pre> tag:
<?php
...
echo '<div style="white-space: pre;">' . $post_text = $_POST['post_text'] . '</div>';
See MDN Docs about CSS' white-space declaration.
The last solution is to replace any line break with the <br> tag and any space with :
<?php
...
echo $post_text = str_replace(' ', ' ', str_replace('\n', '<br>', $_POST['post_text']));
When user press Enter, line break \n inserted in string but in html doesn't show. You should convert it to <br> to showing in html. The str_replace() can replace it in string.
$newStr = str_replace("\n", "<br>", $str)
Also you can use native function nl2br() that inserts HTML line breaks before all newlines in string as #VictorFedorenko mentioned in comment
$newStr = nl2br($str)
I have a title="" attribute in an anchor that contains HTML. I'm trying to remove the title attribute entirely but for whatever reason the preg replace I'm using will not work. I've tried:
$output = preg_replace( '/title=\"(.*?)\"/', '', $output );
$output = preg_replace( '/\title="(.*?)"/', '', $output );
$output = preg_replace( '` title="(.+)"`', '', $output );
None of the above works, but I can use something like:
$output = str_replace( 'title', 'class', $output );
Just to prove that I was able to do something ( and I wasn't uploading the wrong file or something ). Output looks like this:
<a href="#" title="<table border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">
<tbody>
<tr>
<td colspan=\"2\" align=\"center\" valign=\"top\"></td>
</tr>
<tr>
<td valign=\"top\" width=\"50%\">
table content
</td>
<td valign=\"top\" width=\"50%\">
table content
</td>
</tr>
</tbody>
</table>">Link Title</a>
So what I'm trying to do is filter $output and remove the title attribute entirely including everything inside the title attribute. Why will the preg_replace() above not work and what are my options?
I would not use a regex to do operations on [x]html, I'd use a html parser instead.
But if you still want to use a regex then you can use a regex like this:
title="[\s\S]*?"
Working demo
You can have this code:
$re = "/title=\"[\\s\\S]*?\"/";
$str = "Link Title";
$subst = "";
$result = preg_replace($re, $subst, $str);
Update: You can see a clear example about why you shouldn't use regex to parse html in Andrei P. comment
I would like to use the text-indent property (or something like this) to add a indentation of the first line of each paragraph.
First the user can write his text in a textarea, then save it in a DB.
When I want to display this text i use :
$exhib = $res->fetch_array();
echo "<div class='infoContent'>". nl2br($exhib['description']) . "</p></div>";
The line return of the user are stored as \n in DB, and modified to <br /> by nl2br. With my CSS :
.infoContent
{
text-indent: 10px;
}
only the first line is indented. (normal behavior).
Q : How can I make this indentation automatic for each line after a <br /> tag ?
I tried a ugly solution, but it doesn't work because empty paragraph section <p></p> doesn't create another line return (in case the user enter 2 line return \n\n).
echo "<div class='infoContent'><p>" . str_replace("<br />", "</p><p>", nl2br($exhib['description'])) . "</p></div>";
I can replace <p></p> tag by <br /> but it seems to be a very bad solution...
EDIT:
JSfiddle
Thanks
\n\n usually means a new paragraph (enter). The white space between paragraphs is CSS and is actually default browser styling (1em I think?). \n is a <br> (shift + enter).
So don't use nl2br() and do it yourself:
$text = '<p>' . htmlspecialchars($text) . '</p>'; // HTML ENCODE!
$text = preg_replace('#\n\n\n*#', '</p><p>', $text); // 2 or more \n
$text = preg_replace('#\n#', '<br />', $text); // all left-over \n
$text = preg_replace('#><#', ">\n<", $text); // if you like </p>\n<p> with a newline between, like I do
http://3v4l.org/b0AhL
This is pretty much what Markdown does (and Textile and those): 1 newline = BR (not exactly in Markdown) and 2 newlines = P. I always use simple Markdown for rendering plain text.
When you submit your textarea, instead of using CSS to indent only the first line, you can use (non-breaking space).
when you submit your text area, I assume you grab it as such:
$userText = $_POST['description']
Well, before you submit to your database, you could use a simple replace - After you grab the text:
$userText = str_replace("\n", "\n ", $userText);
Then submit that to the database. When it comes back, the nl2br will still make the \n into a <br /> and then it won't see the , though the HTML will see them as four spaces (equal to an indent).
It's dirty, but simple!
Reference: http://www.w3schools.com/php/func_string_str_replace.asp
I have the following html, which I have extracted from an email using imap_fetchbody,
<div dir=\"ltr\"><br><div class=\"gmail_quote\"><div dir=\"ltr\"><br><div class=\"gmail_quote\"><div class=\"\">
---------- Forwarded message ----------<br>
<span style=\"font-family:"Helvetica","sans-serif"\"><\/span>
From: <span style=\"font-family:"Helvetica","sans-serif"\">"
<span>xyz<\/span>" <<a href=\"mailto:support#xyz.com\" target=\"_blank\">support#<span>xyz<\/span>.com<\/a>><\/span><br>
\r\n\r\n\r\n\r\nDate: Fri, Apr 18, 2014 at 7:17 PM<br>
Subject: Bla bla xyz<br><\/div><div><div class=\"h5\">To: XYZ <<a href=\"mailto:xyz#gmail.com\" target=\"_blank\">xyz#gmail.com<\/a>><br><br><br>\r\n\r\n<div dir=\"ltr\">\r\n\r\n\r\n\r\n
<div class=\"gmail_quote\"><div><div><div dir=\"ltr\"><div class=\"gmail_quote\"><div dir=\"ltr\"><div><div class=\"gmail_quote\">
<div dir=\"ltr\"><div><div><div class=\"gmail_quote\"><div style=\"word-wrap:break-word\" lang=\"EN-US\">\r\n\r\n\r\n\r\n
<div>
<div>
<div>
<blockquote style=\"margin-top:5pt;margin-bottom:5pt\">
<div><div>
<table style=\"width:100%;background:none repeat scroll 0% 0% rgb(207,207,207)\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"100%\">
<tbody>
<tr>\r\n\r\n\r\n\r\n
<td style=\"width:325pt;padding:0in\" width=\"650\">\r\n\r\n<div align=\"center\"><table style=\"width:325pt;background:none repeat scroll 0% 0% rgb(207,207,207)\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"650\">\r\n\r\n\r\n\r\n
<tbody><tr>
<td style=\"padding:0in 0in 5.25pt\"><p style=\"text-align:center\" align=\"center\">
<span style=\"font-size:7.5pt;font-family:"Arial","sans-serif";color:rgb(64,64,64)\">If you are unable to see this message,
<a href=\"http:\/\/click.e.xyz.com\/?qs=3771d7c90c958f02a4b2e78494f12a3116ddb15df79b8d04cdf5aeba42012b118\" target=\"_blank\">
<span style=\"color:rgb(64,64,64)\">click here<\/span><\/a> to view.<br>
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nTo ensure delivery to your inbox, please add <a href=\"mailto:support#xyz.com\" target=\"_blank\">support#xyz.com<\/a> to your address book. <\/span><\/p>
<\/td>
<\/tr>
<\/tbody>
<\/table>
<\/div><\/div><\/div><\/div>
I want to get rid of all the \,\r, \n and still keep < and > of the html as is.
I have tried stripslashes, stripcslashes, nl2br, htmlspecialchars_decode. But I am not able to achieve what I want.
Here is what I have tried along with imap_qprint function,
$text = stripslashes(imap_qprint($text));
$body = preg_replace('/(\v|\s)+/', ' ', $text );
Res: It doesn't remove all the white space characters.
Match the following regex:
(\\r|\\n|\\) with the g modifier
and replace with
'' (empty string)
Demo: http://regex101.com/r/mS3wM2
$html = preg_replace('/[\\\\\r\n]/', '', $html);
Match a single character present in the list below «[\\\r\n]»
A \ character «\\»
A carriage return character «\r»
A line feed character «\n»
UPDATE:
Based on your comment I've updated my answer:
$html = preg_replace('%\\\\/%sm', '/', $html);
$html = preg_replace('/\\\\"/sm', '"', $html);
$html = preg_replace('/[\r\n]/sm', '', $html);
You could use something like this to interpret the escape sequences:
function interpret_escapes($str) {
return preg_replace_callback('/\\\\(.)/u', function($matches) {
$map = ['n' => "\n", 'r' => "\r", 't' => "\t", 'v' => "\v", 'e' => "\e", 'f' => "\f"];
return isset($map[$matches[1]]) ? $map[$matches[1]] : $matches[1];
}, $str);
}
If string functions can do the trick, always favor stringfunctions above regex´s. Performace/speed will be better compared to regex's, and they's easier to read in the code:
$message = str_replace("\r\n", '', $message ); // replace all newlines, use double quotes!
$message = stripslashes( $message );
First you have to remove the newlines. As far as I can tell, the \r and \n always come together, so I replace them in 1 go. After that, the stripslashes will remove all escaping slashes.
You have to the the stripslashes after the newlines, else \r\n would result in rn, making them harder to find
This works perfect in my tests:
echo '<textarea style="width:100%; height: 33%;">'.$message.'</textarea>';
echo '<hr />';
$message = str_replace("\r\n", '', $message); // use double quotes!
echo '<textarea style="width:100%; height: 33%;">'.$message.'</textarea>';
echo '<hr />';
$message = stripslashes($message);
echo '<textarea style="width:100%; height: 33%;">'.$message.'</textarea>';
If you can open the file in vi, it would be as easy as:
%s/\\r\|\\n//g
on vi cmd mode
I'm using but getting � on my email. How can I fix this?
Some part of the code:
$review = "
<table width='100%' border='0'>
<tr>
<td class='text_font' >Customer Name: $account_nam</td>
</tr>
</table>";
It displays as
Customer Name:�� Sample Account Name
Also this one:
<td width='20%' style='border-bottom: 1px solid #CECECE;'></td>
<td> has no value but it display the funny symbol �
I guess that your encoding is UTF-8 and in the Mail client its ISO or vice versa.
Be sure to send the correct encoding in the mail header.
Producing a margin with blankspaces is anyways not a good idea, why not seperate table cells for field and value:
$review = "
<table width='100%' border='0'>
<tr>
<td class='text_font' >Customer Name:</td>
<td>" . $account_name . "</td>
</tr>
</table>";
It is most likely an encoding issue. Possibly the setting on the editor you are using is saving the text in some encoding that is not recognized. I have had similar issues using notepad++ and not thinking about encoding.
Chances are you have imported your text from MS word. Word has a few funky characters such as angled quotation marks etc.
You can use htmlentities as Daryl suggests in the comments, but I've found in the past that you have to str_replace those characters out like so:
$text = str_replace("“", '"', $text);
$text = str_replace("”", '"', $text);
$text = str_replace("‘", "'", $text);
$text = str_replace("’", "'", $text);
$text = str_replace("…", '...', $text);
$text = str_replace("–", '-', $text);