Ответ 1
Да, символ обратного пробела - код ASCII-символа 8 (согласно ASCII-таблица), поэтому вы можете вывести его в php, используя chr(). например:
echo 'ab' . chr(8);
выведет "a"
У меня есть ощущение, что ответ "это невозможно", но я подумал, что попрошу удовлетворить свое любопытство.
У меня есть код, который повторяет, где \n неизбежно:
echo "Hello \n";
echo "World!";
Я бы хотел, чтобы строка просто читалась (в выводе кода):
Привет, мир!
... таким образом, удалив \n.
Итак, мне было интересно, возможно ли выполнение символа "backspace" во время вывода PHP?
Что-то простое, как str_replace( "\n", 'backspace-character', $str );
Да, символ обратного пробела - код ASCII-символа 8 (согласно ASCII-таблица), поэтому вы можете вывести его в php, используя chr(). например:
echo 'ab' . chr(8);
выведет "a"
Если целью вывода является HTML, то лишние пробелы не имеют значения - браузеры не отображают несколько смежных пространств (поэтому мы имеем
)
Если целью вывода является что-то другое, тогда вы можете просто очистить вывод. Как вы можете видеть из других ответов, существует множество способов сделать это. Кажется, что вы работаете с выражениями эха, поэтому output-buffering будет маршрутом, который вы хотите принять.
ob_start();
echo "Hello \n";
echo "World!";
$output = preg_replace( "/ +/", ' ', str_replace( "\n", ' ', ob_get_clean() ) );
echo $output;
Если вы хотите сделать это для чего угодно, вы можете использовать выходной буфер:
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);
}
Это не прямой ответ на его точный вопрос, а на то, на что похоже похоже название: вывод символа "backspace" PHP, что, вероятно, полезно только при использовании PHP CLI.
Вы можете найти правильный код ASCII для этого (и других символов) в таблице ASCII, а затем использовать либо chr() или escape-последовательность:
echo chr(8);
echo "\010";
Как просто заменить "\n
" на пробел (или просто ничего, если у вас уже есть одно место в вашей входящей строке)?
Подобно этому, например:
$str = "Hello\nWorld!";
var_dump($str);
$str = str_replace("\n", ' ', $str);
var_dump($str);
Первый вывод дает:
string 'Hello
World!' (length=12)
И второй:
string 'HelloWorld!' (length=11)
Этого недостаточно?
(Или, может быть, я плохо понимаю вопрос)
Разве вы не можете сделать это так:
$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
автоматически выполнит трюк (и я не думаю, что использование регулярного выражения для такой простой вещи действительно хорошая идея).
Вместо того, чтобы думать о том, как сделать обратный символ, я бы предложил переосмыслить проблему. Почему вы хотите вернуть часть своего результата? Наверное, потому, что ты дал слишком рано.
Вместо выполнения эха в промежуточных значениях добавьте их в буфер. Затем отредактируйте буфер. Затем распечатайте его. Если вы не можете контролировать, производится ли выход или нет (например, вы используете внешнюю библиотеку поставщика, которая выводит данные), используйте буферизацию вывода PHP.
Я не знаю, как сделать backspace, но если вы просто пытаетесь сделать новую строку, я бы использовал:
echo "<br>";
PHP-код позволяет использовать html-код, если он используется в инструкции print или echo и находится внутри двойных кавычек.