Pregunta

Tengo una especie de cosa extraña que realmente Nead para mi formateo de texto. No pido que me dé la razón por la que hice esta cosa extraña! ; -)

Por lo tanto, mi script PHP reemplaza todas las plegamientos de línea "\ n" con uno de los símbolos speacial como "|". Al insertar datos de texto a la base de datos, el script PHP reemplaza todas las plegamientos línea con el símbolo "|" y cuando la secuencia de comandos lee los datos de texto de la base de datos, que sustituye todos los símbolos especiales "|" con el plegado línea "\ n".

Quiero restringir el formato de texto en la forma en que se cortó la línea de plegamientos si hay más de 2 pliegues de línea utilizados en cada uno de los textos de separación.

Aquí está el ejemplo del texto que desea que el script formato:

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...

Quiero formato restict 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...

Así, en el primer ejemplo sólo hay una línea de plegado entre 2 textos y en el segundo ejemplo, hay 3 plegamientos de línea entre 2 textos.

¿Cómo puede ser posible sustituir más de 2 plegamientos línea de símbolos "|" si se detectan en el texto?

Este es un tipo de ejemplo que quiero la secuencia de comandos que debe hacer:

    $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, tengo problemas! Esto no funciona cuando el texto datos se envían en correos Forma. Vistazo a esto:

//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"];

Esta es la entrada de texto que el área de texto y después de la str_replace que muestran lo siguiente:

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.

Aquí está mi código PHP y 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>
¿Fue útil?

Solución

Parece un lugar bueno para usar una expresión regular:

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

En Inglés: "Sustitución de 3 o más caracteres | con ||"

Otros consejos

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

    return $content;
}

$text = clean($text);

Algo así como una función de bucle

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top