PHP удаляет разрыв строки или CR LF без успеха

Я сделал функцию, чтобы удалить разрыв строки с php без успеха, я попробовал все заменить код, и я все еще получаю этот разрыв строки, я создаю json файл, и я не могу его прочитать из jsonp с jquery из-за этой строки перерыв, похоже, нарушает все.

function clean($text)
{
$text = trim( preg_replace( '/\s+/', ' ', $text ) );  
$text = preg_replace("/(\r\n|\n|\r|\t)/i", '', $text);
return $text;
}

Когда я смотрю на источник, там некоторые строки прерывают аппликацию во всех href, img и br это выход json_encode Пример:

<a
href=\"http:\/\/example.com\/out\/content\/\" title=\"link to content website\">

line break afer a. он hapenig для img src и br

единственный способ, которым я могу удалить это, разбить его с помощью

$text = preg_replace("/\s/i", '', $text);

Но вы понимаете, что во всей строке нет места, и это не то, что мы хотим.

Ответ 1

эта замена работает лучше для меня:

= str_replace (array("\r\n", "\n", "\r"), ' ', $text)

Ответ 2

Как насчет этого:

function clean($text)
{
    $parts = explode(' ', $text);
    foreach ($parts as $key => $value)
        $parts[$key] = preg_replace('/\s/', ' ', $value);
    return implode(' ', $parts);
}

Действительно, если вместо очистки JSON файла, подобного этому, вы можете использовать json_encode для его создания, вы избавитесь от этой проблемы в предыдущий шаг.

Ответ 3

Как насчет следующего

function clean($text)
{
    return trim(preg_replace("/(\s*[\r\n]+\s*|\s+)/", ' ', $text));
}

первая часть \s*[\r\n]+\s* заменит любые разрывы строк, ее ведущие пробелы и ограничивает пробелы в одно пространство.

вторая часть \s+ будет сжимать пробелы в одно пространство.

то trim() удаляет ведущее/хвостовое пространство.

Ответ 4

используйте json_encode() и json_decode() из расширение JSON для обработки задач JSON de/serialization:

$myobj = array( 'foo' => 'bar', 'foz' => 'baz')

$json_myobj = json_encode($myobj);
echo $json_myobj;

$myobj = json_decode($json_myobj);
print_r($myobj);

Ответ 5

Возможно, вы могли бы попробовать пройти текстовый символ по символу и вызвать ord() для каждого, чтобы вы могли видеть, действительно ли эти символы прерывания \r,\n s?

Недавно у меня возникла аналогичная проблема с пробелом, который оказался нерасщепляемым пространством даже внутри таблицы ASCII (ord code 194 или что-то еще).

Если вам интересно, мое решение состояло в том, чтобы не пытаться фильтровать перерывы, а отфильтровывать ВСЕ, кроме того, что ожидалось в тексте, например:

$text = preg_replace("/[^ \na-zа-я0-9`~\[email protected]#\$%\^&\*\(\)_\+\-\=\[\]\{\}\\\|;\:'\",\.\/\<\>\?]+/ui", "", $text);

Ответ 6

Используемый метод echo str_replace(array('\r\n', '\r', '\n', '\t'), array('\\r\\n', '\\r', '\\n', '\\t'), $text);

Это означает, что вы видите, какие символы вызывают перерывы в тексте, и заменяете их соответствующим образом. Например, если у вас есть "\n", нарушающий текст, когда вы используете этот код, он будет отображать "\n" на своем месте. Пример:

<a
href=\"http:\/\/example.com\/out\/content\/\" title=\"link to content website\">

станет:

<a\n href=\"http:\/\/example.com\/out\/content\/\" title=\"link to content website\">

Естественно, что существует большое количество других сломанных символов, которые могут быть использованы, но наиболее часто используются \r\n,\r,\n и\t.

Ответ 7

function clean($text)
{
    return trim(preg_replace('/\\\\r|\\\\n|\\\\t/i', ' ', $text));
}

Прекрасно работает.

Ответ 8

Если вы хотите удалить CR и сохранить LF, это действительно очень просто (просто здравый смысл):

$text = str_replace("\r", "", $text);

Ответ 9

Попробуйте использовать функцию обрезки по умолчанию с помощью "character_mask".

Например:

$text = trim($text, " \t\n\r\0\x0B"); 

Прочитайте официальную документацию http://php.net/manual/ru/function.trim.php