Удалить разрывы строк и новые строки из значения переменной PHP? - PullRequest
2 голосов
/ 14 июля 2009

У меня есть PHP-скрипт, который делает следующее:

  • Использует file_get_contents () для получения содержимого HTML-файла
  • Повторяет объект JSON

Проблема в том, что значение, полученное из file_get_contents, является многострочным. Все должно быть в одной строке, чтобы быть в правильном формате JSON.

Например

Файл PHP:

$some_json_value = file_get_contents("some_html_doc.html");

echo "{";
echo "\"foo\":\"$some_json_value\"";
echo "}";

Полученный HTML-документ выглядит так:

{
foo: "<p>Lorem ipsum dolor 
sit amet, consectetur 
adipiscing elit.</p>"
}

Моя цель - сделать так, чтобы полученный HTML-документ выглядел следующим образом (значение - одна строка, а не три)

{
foo: "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>"
}

Как это можно сделать. Я понимаю, что содержание будет одной строкой, если исходный документ HTML - одна строка; однако я пытаюсь избежать этого решения.

Обновление

На вопрос был дан правильный ответ. Вот полный рабочий код:

$some_json_value = file_get_contents("some_html_doc.html");
$some_json_value = json_encode($some_json_value); // this line is the solution

echo "{";
echo "\"foo\":\"$some_json_value\"";
echo "}";

Ответы [ 3 ]

7 голосов
/ 14 июля 2009

Существуют символы, отличные от разрывов строк, которые могут вызвать проблемы (например, двойные кавычки и обратные слэши), и поэтому вместо того, чтобы просто удалять разрывы строк, было бы лучше правильно кодировать ваш JSON. Для PHP> = 5.2 есть встроенная функция json_encode и есть библиотеки, доступные для более старых версий PHP (см., Например, http://abeautifulsite.net/notebook/71)

5 голосов
/ 14 июля 2009

Простая замена?

$content = str_replace(
    array("\r\n", "\n", "\r"), 
    '',
    file_get_contents('some_html_doc.html')
);

Но лучшей идеей было бы сделать json_encode () сразу;

$content = json_encode(file_get_contents('some_html_doc.html'));
0 голосов
/ 14 июля 2009

Вы можете заменить все вхождения \ n и \ r на "". Проверьте preg_replace .

...