Ответ 1
эта замена работает лучше для меня:
= str_replace (array("\r\n", "\n", "\r"), ' ', $text)
Я сделал функцию, чтобы удалить разрыв строки с 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);
Но вы понимаете, что во всей строке нет места, и это не то, что мы хотим.
эта замена работает лучше для меня:
= str_replace (array("\r\n", "\n", "\r"), ' ', $text)
Как насчет этого:
function clean($text)
{
$parts = explode(' ', $text);
foreach ($parts as $key => $value)
$parts[$key] = preg_replace('/\s/', ' ', $value);
return implode(' ', $parts);
}
Действительно, если вместо очистки JSON файла, подобного этому, вы можете использовать json_encode для его создания, вы избавитесь от этой проблемы в предыдущий шаг.
Как насчет следующего
function clean($text)
{
return trim(preg_replace("/(\s*[\r\n]+\s*|\s+)/", ' ', $text));
}
первая часть \s*[\r\n]+\s*
заменит любые разрывы строк, ее ведущие пробелы и ограничивает пробелы в одно пространство.
вторая часть \s+
будет сжимать пробелы в одно пространство.
то trim()
удаляет ведущее/хвостовое пространство.
используйте 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);
Возможно, вы могли бы попробовать пройти текстовый символ по символу и вызвать ord()
для каждого, чтобы вы могли видеть, действительно ли эти символы прерывания \r,\n
s?
Недавно у меня возникла аналогичная проблема с пробелом, который оказался нерасщепляемым пространством даже внутри таблицы ASCII (ord code 194 или что-то еще).
Если вам интересно, мое решение состояло в том, чтобы не пытаться фильтровать перерывы, а отфильтровывать ВСЕ, кроме того, что ожидалось в тексте, например:
$text = preg_replace("/[^ \na-zа-я0-9`~\[email protected]#\$%\^&\*\(\)_\+\-\=\[\]\{\}\\\|;\:'\",\.\/\<\>\?]+/ui", "", $text);
Используемый метод 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.
function clean($text)
{
return trim(preg_replace('/\\\\r|\\\\n|\\\\t/i', ' ', $text));
}
Прекрасно работает.
Если вы хотите удалить CR и сохранить LF, это действительно очень просто (просто здравый смысл):
$text = str_replace("\r", "", $text);
Попробуйте использовать функцию обрезки по умолчанию с помощью "character_mask".
Например:
$text = trim($text, " \t\n\r\0\x0B");
Прочитайте официальную документацию http://php.net/manual/ru/function.trim.php