Pergunta

Eu tenho um tipo de coisa estranha que eu realmente não disse para a minha formação de texto. Não me pergunte, por favor, por que eu fiz essa coisa estranha! ;-)

Portanto, meu script PHP substitui todas as dobras de linha " n" por um dos símbolos espaciais como "|". Quando insiro dados de texto no banco de dados, o script PHP substitui todas as dobras de linha pelo símbolo "|" E quando o script lê dados de texto do banco de dados, ele substitui todos os símbolos especiais "|" com dobragem de linha " n".

Quero restringir o formato de texto da maneira que ele cortará as dobras da linha se houver mais de 2 dobras de linha usadas em cada textos de separação.

Aqui está o exemplo do texto que quero que o script formate:

this is text... this is text... this is text...this is text...this is text... this is text... this is text... this is text... this is text... this is text...

this is text... this is text... this is text... this is text... this is text... this is text... this is text... this is text... this is text... this is text...

Eu quero restringir o formato como:

this is text... this is text... this is text...this is text...this is text... this is text... this is text... this is text... this is text... this is text...



this is text... this is text... this is text... this is text... this is text... this is text... this is text... this is text... this is text... this is text...

Portanto, no primeiro exemplo, há apenas uma linha dobrando entre 2 textos e no segundo exemplo, existem 3 dobras de linha entre 2 textos.

Como pode ser possível substituir mais de 2 símbolos de dobras de linha "|" Se eles são detectados no texto?

Este é um tipo de exemplo que quero que o script faça:

    $text = str_replace("|||", "||", $text);
    $text = str_replace("||||", "||", $text);
    $text = str_replace("|||||", "||", $text);
    $text = str_replace("||||||", "||", $text);
    $text = str_replace("|||||||", "||", $text);
    ...
    $text = str_replace("||||||||||", "||", $text);

    $text = str_replace("|", "<br>", $text);

HM, eu tenho problemas! Isso não funciona quando os dados de texto são enviados no método post. VEJA ISSO:

//REPLACING ALL LINE FOLDINGS WITH SPECIAL SYMBOL
$_POST["text"] = str_replace("\n","|",$_POST["text"]);
// REMOVING ALL LINE FOLDINGS
$_POST["text"] = trim($_POST["text"]);
// IF THERE ARE MORE THAN 3 LINE HOLDINGS - FORMAT TO 1 LINE HOLDING
$_POST["text"] = preg_replace("/\|{3,}/", "||", $_POST["text"]);
echo $_POST["text"];

Aqui está o texto em que insiro na textarea e, após o str_place, ele mostra isso:

This is text 1. This is text 1. This is text 1. This is text 1. This is text 1. This is text 1. This is text 1. | | |This is text 2. This is text 2. This is text 2. This is text 2. This is text 2. This is text 2. This is text 2. | | | |This is text 3. This is text 3. This is text 3. This is text 3. This is text 3.

Aqui está meu código PHP e HTML:

<?
//REPLACING ALL LINE FOLDINGS WITH SPECIAL SYMBOL
$_POST["text"] = str_replace("\n","|",$_POST["text"]);

echo "1) ".$_POST["text"]."<br><br>";

// REMOVING ALL LINE FOLDINGS
$_POST["text"] = trim($_POST["text"]);
// IF THERE ARE MORE THAN 3 LINE HOLDINGS - FORMAT TO 1 LINE HOLDING
$_POST["text"] = preg_replace("/\|{3,}/", "||", $_POST["text"]);

echo "2) ".$_POST["text"]."<br><br>";
?>
<html>

<head>
<title>No title</title>
<meta name="generator" content="Namo WebEditor v5.0">
</head>

<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<form name="form1" method="post" action="test.php">
    <p><textarea name="text" rows="8" cols="55"></textarea></p>
    <p><input type="submit" name="formbutton1"></p>
</form>
<p>&nbsp;</p>
</body>

</html>
Foi útil?

Solução

Parece um bom lugar para usar uma expressão regular:

$text = preg_replace('/\|{3,}/', '||', $text);

Em inglês: "Substitua 3 ou mais | personagens com ||"

Outras dicas

function clean($content) {
    $content = str_replace("||","|",$content);
    if (stripos("||",$content) !== false) {
        $content = clean($content);
    }

    return $content;
}

$text = clean($text);

Algo como uma função de loop

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top