Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carlos Maniero

[Resolvido] Quebra de Linha na Tag <PRE>

Recommended Posts

Cara eu tô com um problema e preciso resolver ele urgente eu to trabalhando com PHP mais acredito que minha duvida seja HTML e não PHP a duvida é a seguinte sabemos que ao colocar um texto no banco de dados e depois mostra-lo em uma página é preciso que eu coloque dentro da tag <pre></pre> para que ele reconheça paragrafos mais ai que tá o erro esse texto em uma tabela e na hora da pessoa digitar ela não der ENTER o texto aparece em uma linha só, distruindo todo meu layout já tentei usar Width no FF roda de boa Mais no maldito IE necas e não quero usar overflow(CSS) porque fica ruim estéticamente alguem sabe como resolver esse erro para dar quebra de linha no IE?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu caro Carlos Maniero, a solução para isso está no próprio PHP...

 

Primeiro, vamos à lógica: se tenho um <textarea>, por exemplo, sabemos que o usuário pode usar quebras de linhas a mais apenas para ele poder enxergar melhor o que está digitando, certo? Pois bem, sabemos que esses "enters" são salvos no banco de dados... Então, o que temos que fazer? Na hora de exibir as informações que foram salvas, temos que identificar se há uma quebra de linha ou não... E com o PHP isso é possível!

 

Segundo, vamos à prática. Observe o código abaixo:

$texto = explode("[BR]", preg_replace("/(\\r)?\\n/i", "[BR]", $dadosDoBanco["texto"]));
Aqui temos o seguinte: a função preg_replace usa uma expressão regular que busca quebras de linhas (o \r é opcional devido a alguns SOs, não me lembro agora quais são, reconhecerem a quebra de linha dessa forma ao invés de \n) e, no meu exemplo, todas as quebras serão substituídas por [bR] (usei essa simbologia apenas para exemplificar, fazendo uma relação à tag <br />...) no texto que veio do banco de dados. A função explode vai dividir seu texto justamente nos [bR]'s criados, fazendo então com que cada linha do texto do seu banco de dados, nesse momento, corresponde a uma posição do array criado, que dei o nome de $texto.

 

Até aqui tudo bem?

 

Agora vamos mostrar cada linha do texto em uma tag <p> separadamente.

foreach($texto as $linha)
{
	if(trim($linha) != "")
	{
		echo "<p>" . htmlentities($linha) . "</p>\n";
	}
}
Tcharãm! Aqui está! Esse código acima faz o seguinte: para cada (foreach) índice do array $texto, vou chamar de $linha. Aqui está um grande detalhe: para evitar que sejam inseridas aquelas quebras de linhas a mais, simplesmente verifico se a $linha em questão não estiver vazia (diferente de "nada"), eu imprimo então uma tag <p>, seguido do conteúdo daquela linha, e depois fecho a tag </p>, adicionando uma quebra de linha no código apenas com o \n.

 

E pronto! Agora você não precisa mais utilizar a tag <pre>...

 

Espero que isso lhe ajude (e a outros também...).

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valew Pela ajuda de todos,

 

e realmente a explicação de paulo foi uma tremenda aula de PHP.

 

Mais encontrei uma solução menos complexa:

 

print nl2br($mensagem);

Bem mais prático e tambem não precisa da tag <pre>.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah sim, claro, temos essa função nl2br (new line 2[two = to]br)...

 

É que eu não uso a tag <br>... http://forum.imasters.com.br/public/style_emoticons/default/closedeyes.gif No meu ponto de vista, na maior parte dos casos, se eu tenho uma nova linha de texto, naturalmente isso pode ser considerado como um novo parágrafo... Por isso eu sempre deixo cada linha de texto em um parágrafo diferente... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Mas que bom que resolveu!

 

Boa sorte nos estudos!

 

http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal

 

Estou quebrando a cabeça aqui, vocês podem me ajudar?

 

Seguinte, tenho um script que puxa informações de outro site, o site retorna as informações dentre de um <pre>, mas não consigo individualizar, ou seja, quero quebrar as linhas.

 

Visualizando o retorno temos:

 

<pre>

O conteúdo do texto é esse.

Dei uma olhada no código fonte e não encontrei nenhuma tag de quebra de linha.

São várias linhas que eu quero tratar, mas sem individualizá-las esta difícil.

Como posso resolver este problema?

</pre>

 

Coloquei todo o conteúdo de retorno na variável $resultado.

 

O script é o seguinte:

 

$texto = explode("<br />", preg_replace('/(\\r)?\\n/i', '<br />', $resultado["texto"]));
foreach($texto as $linha)
{
if(trim($linha) != "")
{
echo "<p>" . htmlentities($linha) . "</p>\n";
}
}
Mas não consigo o retorno esperado.
Se puderem me dizer o que esta errado, por favor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O meu eu fiz assim

 

$palavra             = $_POST['artigo']);

$palavra = explode("[BR]", preg_replace("/(\\r)?\\n/i", "[BR]", $palavra));
        
                foreach($palavra as $linha){
                    if(trim($linha) != "")
                    {
                    htmlentities($linha);
                    }
                }
        
        $palavra = $linha;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.