Pergunta

Tenho um sistema configurado para que os usuários enviem seus artigos para meu banco de dados.Como será apenas HTML, não quero esperar que eles saibam digitar <br /> toda vez que há uma nova linha, estou usando a função PHP nl2br() na entrada.

Também estou fornecendo uma ferramenta de modificação de artigos, que trará seus artigos de volta ao formulário (no entanto, esta é uma página diferente) e permitirá que eles o editem.Ao fazer isso, o <br /> elementos também estavam aparecendo (ainda com novas linhas).Para remediar o
elementos aparecendo (o que eu esperava, de qualquer maneira) eu adicionei preg_replace('/<br(\s+)?\/?>/i', "\n", mysql_result($result,$i,"content")) que encontrei em outra pergunta neste site.Ele faz o trabalho de remover o <br /> elementos, mas como está substituindo-os por novas linhas, e as novas linhas teriam permanecido originalmente de qualquer maneira, toda vez que a postagem for editada, mais e mais novas linhas serão adicionadas, espaçando cada vez mais os parágrafos.Isso é algo que um usuário não entenderá.

Por exemplo, digamos que eu insira o seguinte no formulário de envio do artigo:

 Hello, this is my article.
 I am demonstrating a new line here.

Isso será convertido para:

Hello, this is my article.<br />
I am demonstrating a new line here.

Observe que, mesmo que o caractere de nova linha tenha sido convertido, ainda há uma nova linha no texto.No formulário de edição, o <br /> será convertido novamente para nova linha e ficará assim:

Hello, this is my article.

I am demonstrating a new line here.

Porque o <br /> foi convertido para uma nova linha, mas já havia uma nova linha.Então, acho que o que espero é que seja originalmente convertido para algo assim:

Hello, this is my article.<br />I am demonstrating a new line here.

Estou me perguntando ...existe uma maneira de parar o nl2br() função de manter as novas linhas originais?Pode ter a ver com o Windows \r\n personagem?

Foi útil?

Solução

A função que você está usando, nl2br é usado para inseri-los, mas não para substituí-los.Se você quiser substituir \n com <br /> você só precisa usar str_replace.Igual a:

$string = str_replace("\n","<br />",$string);

Não há absolutamente nenhuma necessidade de regex nesta situação.

Outras dicas

Parece que o problema que você descreveu não é um bug, mas um recurso do bl2br.Você poderia simplesmente escrever sua própria função para isso, como:

<?php
function NlToBr($inString)
{
    return preg_replace("%\n%", "<br>", $inString);
}
?>

Encontrei este nos comentários da documentação da função nl2br no Manual do PHP: http://php.net/manual/de/function.nl2br.php.Se aquele que postei não funcionou para você, deve haver muito mais de onde veio.

(Ou apenas use a função da outra resposta que acabou de ser postada, acho que deve funcionar também)

Isso deve consertar:

preg_replace('/<br(\s+)?\/?>(?!\s*\n)/i', "\n", mysql_result($result,$i,"content"))

Você não pode simplesmente remover as quebras, porque elas podem estar na mesma linha.Este regex substituirá todas as quebras por nova linha, mas não aquelas seguidas por nova linha.

Vai deixar o <br>\n No texto.Regex adicional irá eliminá-los:

preg_replace('/<br(\s+)?\/?>/i', "", $res)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top