Формирование текста PHP: обнаружение нескольких символов подряд

StackOverflow https://stackoverflow.com/questions/2581141

Вопрос

У меня есть какая-то странная вещь, которую я действительно просто для формирования текста. Не спрашивайте меня, пожалуйста, почему я сделал эту странную вещь! ;-)

Итак, мой скрипт PHP заменяет все складывания линии « N» с одним из слабого символа типа «|». Когда я вставляю текстовые данные в базу данных, скрипт PHP заменяет все складывания линии с символом «|» И когда скрипт читает текстовые данные из базы данных, он заменяет все специальные символы "|" С линией складной " n".

Я хочу ограничить текстовый формат таким образом, чтобы он сократил складки линии, если в каждом разделении текстов используются более 2 линейных складок.

Вот пример текста, который я хочу, чтобы скрипт в формате:

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

Я хочу отказаться от формата, как:

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

Таким образом, на первом примере есть только одна линия складывания между 2 текстами и на втором примере есть 3 списка линий между 2 текстами.

Как можно было бы заменить более 2 линейных складов символов «|» Если они обнаружены на тексте?

Это своего рода примера, который я хочу, чтобы сценарий сделать:

    $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);

Хм, у меня есть проблемы! Это не работает, когда текстовые данные отправляются в Post Method. ПОСМОТРИ НА ЭТО:

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

Вот текст, который я вводил в Textarea и после того, как STR_replace он показывает это:

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.

Вот мой PHP и 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>
Это было полезно?

Решение

Похоже, хорошее место для использования регулярного выражения:

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

На английском языке: «Заменить 3 или более | персонажи с ||"

Другие советы

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

    return $content;
}

$text = clean($text);

Что-то вроде функции петли

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top