Gen*_*nik 1 php encoding nl2br
有人刚刚在我的网站上创建了一个组,其中有一个描述\n\r.问题是我已经对描述文本这样做了:
//Convert all urls to links
$group_description = preg_replace('#([\s|^])(www)#i', '$1http://$2', $group_description);
$pattern = '#((http|https|ftp|telnet|news|gopher|file|wais):\/\/[^\s]+)#i';
$replacement = '<a href="$1" target="_blank">$1</a>';
$group_description = preg_replace($pattern, $replacement, $group_description);
$group_description = str_replace("\'" , "'", $group_description );
$group_description = nl2br($group_description);
/* Convert all E-mail matches to appropriate HTML links */
$pattern = '#([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.';
$pattern .= '[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)#i';
$replacement = '<a href="mailto:\\1">\\1</a>';
$group_description = preg_replace($pattern, $replacement, $group_description);
Run Code Online (Sandbox Code Playgroud)
你可以在这里看到这种情况.
你看到它在那里说\n\r Welcome to Join.
它为什么不成为<br />标签?
这可能很重要,以下是我首先将此文本放入db中的方法:
$group_description = mysql_real_escape_string($_POST['group_description']);
// And then insert the $group_description into the db without doing any more operations on it.
Run Code Online (Sandbox Code Playgroud)
知道我为什么还要这个\n\r?
问题是\ r和\n分别以"\""r"和"\""\n"存储在数据库中.它们不是存储为回车符或换行符,而是字母后面的斜杠字符.当你打电话时nl2br(),它正在寻找新的线条字符,而不是它的文字表示.希望这是有道理的.
您可以使用正则表达式(preg_replace)或str_replace替换它们.但问题可能是由数据插入数据库的方式引起的.
例如:
$string = str_replace('\n', "\n", $string);
$string = str_replace('\r', "\r", $string);
Run Code Online (Sandbox Code Playgroud)
你会注意到我用第一个单引号和第二个双引号.使用单引号时,"\ r"和"\n"将存储为文本,而不是特殊字符.这可能是因为它们没有正确存储在您的数据库中.
| 归档时间: |
|
| 查看次数: |
557 次 |
| 最近记录: |