Может возникнуть символ "backspace" PHP во время выхода?

У меня есть ощущение, что ответ "это невозможно", но я подумал, что попрошу удовлетворить свое любопытство.

У меня есть код, который повторяет, где \n неизбежно:

echo "Hello \n";
echo "World!";

Я бы хотел, чтобы строка просто читалась (в выводе кода):

Привет, мир!

... таким образом, удалив \n.

Итак, мне было интересно, возможно ли выполнение символа "backspace" во время вывода PHP?

Что-то простое, как str_replace( "\n", 'backspace-character', $str );

Ответы

Ответ 1

Да, символ обратного пробела - код ASCII-символа 8 (согласно ASCII-таблица), поэтому вы можете вывести его в php, используя chr(). например:

echo 'ab' . chr(8);

выведет "a"

Ответ 2

Если целью вывода является HTML, то лишние пробелы не имеют значения - браузеры не отображают несколько смежных пространств (поэтому мы имеем  )

Если целью вывода является что-то другое, тогда вы можете просто очистить вывод. Как вы можете видеть из других ответов, существует множество способов сделать это. Кажется, что вы работаете с выражениями эха, поэтому output-buffering будет маршрутом, который вы хотите принять.

ob_start();

echo "Hello \n";
echo "World!";

$output = preg_replace( "/ +/", ' ', str_replace( "\n", ' ', ob_get_clean() ) );

echo $output;

Ответ 3

Если вы хотите сделать это для чего угодно, вы можете использовать выходной буфер:

ob_start();

echo "Hello\n World";

$out = ob_get_contents();

ob_end_clear();
echo str_replace('\n', '', $out);

Вы даже можете использовать httaccess для добавления скриптов, содержащих это, к любому вызываемому script.

Однако, не могли бы вы просто справиться с этим, прежде чем он будет установлен на stdout? Как

function print2($str){
    echo str_replace("\n", '', $str);
}

Ответ 4

Это не прямой ответ на его точный вопрос, а на то, на что похоже похоже название: вывод символа "backspace" PHP, что, вероятно, полезно только при использовании PHP CLI.

Вы можете найти правильный код ASCII для этого (и других символов) в таблице ASCII, а затем использовать либо chr() или escape-последовательность:

echo chr(8);
echo "\010";

Ответ 5

Как просто заменить "\n" на пробел (или просто ничего, если у вас уже есть одно место в вашей входящей строке)?

Подобно этому, например:

$str = "Hello\nWorld!";
var_dump($str);

$str = str_replace("\n", ' ', $str);
var_dump($str);

Первый вывод дает:

string 'Hello
World!' (length=12)

И второй:

string 'HelloWorld!' (length=11)

Этого недостаточно?
(Или, может быть, я плохо понимаю вопрос)

Ответ 6

Разве вы не можете сделать это так:

$str = str_replace("\n", ' ', $str);
while (strpos($str, '  ') !== false) // while there two spaces in a row
  $str = str_replace('  ', ' ', $str);

Теперь $str будет содержать все пробелы или \n последовательности символов, замененные только одним пробелом. (потому что если вы просто удалите \n, у вас есть место, где пробел отсутствует, и если вы просто замените его пробелом, у вас будут несколько мест с несколькими пробелами в строке).

EDIT: я не знаю, действительно ли цикл необходим, но мне нечего тестировать, если str_replace автоматически выполнит трюк (и я не думаю, что использование регулярного выражения для такой простой вещи действительно хорошая идея).

Ответ 7

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

Вместо выполнения эха в промежуточных значениях добавьте их в буфер. Затем отредактируйте буфер. Затем распечатайте его. Если вы не можете контролировать, производится ли выход или нет (например, вы используете внешнюю библиотеку поставщика, которая выводит данные), используйте буферизацию вывода PHP.

Ответ 8

Я не знаю, как сделать backspace, но если вы просто пытаетесь сделать новую строку, я бы использовал:

echo "<br>";

PHP-код позволяет использовать html-код, если он используется в инструкции print или echo и находится внутри двойных кавычек.