PHP str_replace <br/>,\ r \ n进入MySQL的Real New Line

时间:2017-11-07 03:57:13

标签: php

我有一个带有<br>标签的文本,我想将它作为新行保存到MySQL数据库中。不是HTML标签。

例如:

$string = 'some text with<br>tags here.'

我希望将它保存到MySQL中:

some text with tags here

为此目的,str_replace有什么权利?谢谢。

5 个答案:

答案 0 :(得分:4)

PHP中已经有一个函数可以将新行转换为名为nl2br()的br。然而,反之则不然。相反,你可以像这样创建自己的函数:

function br2nl($string)
{
    $breaks = array("<br />","<br>","<br/>");  
    return str_ireplace($breaks, "\r\n", $string); 
}

然后,只要您想使用它,只需按以下方式调用它:

$original_string = 'some text with<br>tags here.';
$good_string = br2nl($original_string);

有三件事值得一提:

  1. 最好将数据完全按照用户输入的方式存储在数据库中,然后在检索时进行转换。当然这取决于你在做什么。
  2. 某些系统(如Windows)使用\ r \ n。某些系统(如Linux和Mac)使用\ n。某些系统(如较旧的Mac系统)用户\ r \ n表示新行字符。鉴于此,特别是如果您选择使用上面的第1点,您可能更喜欢使用PHP常量PHP_EOL而不是\ r \ n。无论您使用何种系统,这都将提供正确的新行字符。
  3. 我上面发布的方法比preg_replace更有效。但是,它没有考虑非标准HTML,例如<br />和其他变体。如果您需要考虑这些变化,那么您应该使用preg_replace()功能。话虽如此,人们可以推翻所有可能的变化,但仍然没有考虑到所有变化。例如,考虑<br id="mybreak">以及许多其他属性和空格的组合。

答案 1 :(得分:1)

在这里尝试一下。这会将所有<br>替换为\r\n

$string = 'some text with<br>tags here.';
str_replace("<br>","\r\n",$string);
echo $string;

<强>输出:

some text with
tags here.

答案 2 :(得分:1)

您可以按照建议使用str_replace

$string = 'some text with<br>tags here.';
$string = str_replace('<br>', "\r\n", $string);

虽然,如果您的<br>代码也可能被关闭,<br /><br/>,则可能值得考虑使用preg_replace

$string = 'some text with<br>tags here.';
$string = preg_replace('/<br(\s+\/)?>/', "\r\n", $string);

答案 3 :(得分:1)

您可以使用htmlentities - 将所有HTML字符转换为实体,将html_entity_decode转换为HTML实体转换为字符

$string = 'some text with<br>tags here'

$a = htmlentities($string);

$b = html_entity_decode($a);

echo $a; // some text with&lt;br&gt;tags here

echo $b; // some text with<br>tags here

答案 4 :(得分:1)

尝试:

  

mysql_real_escape_string

function safe($value){
    return mysql_real_escape_string($value);
}