PHP форматирование текста: обнаружение нескольких символов подряд - PullRequest
0 голосов
/ 06 апреля 2010

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

Итак, мой 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...

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

Каким образом можно заменить более 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);

ХМ, У меня есть проблемы! ЭТО НЕ РАБОТАЕТ, КОГДА ТЕКСТОВЫЕ ДАННЫЕ ОТПРАВЛЯЮТСЯ ПОЧТОВЫМ МЕТОДОМ. СМОТРИТЕ НА ЭТО:

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

Ответы [ 2 ]

5 голосов
/ 06 апреля 2010

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

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

На английском языке: «Заменить 3 или более | символов на ||»

0 голосов
/ 06 апреля 2010
function clean($content) {
    $content = str_replace("||","|",$content);
    if (stripos("||",$content) !== false) {
        $content = clean($content);
    }

    return $content;
}

$text = clean($text);

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

...