PHP "backspace"

9 Cevap

Ben ", bu mümkün değil" cevabı bir his var ama benim merakımı tatmin etmek için sormak düşündüm.

Ben \ n kaçınılmaz olduğu yankılandı bulunuyor bazı kod var:

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

Ben sadece (kod çıktı) okumak hattı istiyorum:

Dünya Hello!

Böylece ... \ n çıkarılması.

Bu PHP'nin çıkışı sırasında "backspace" karakterini yürütmek mümkün Yani eğer ben merak ediyorum?

str_replace( "\n", 'backspace-character', $str ); gibi basit bir şey

9 Cevap

Evet, backspace karakter, sen chr() kullanarak php çıktı bunu yapabilirsiniz böylece (ASCII table göre) ASCII karakter kodu 8'dir. örneğin:

echo 'ab' . chr(8);

çıktısı "a"

Çıkış hedef HTML ise ekstra boşluk önemi yok - tarayıcılar (biz   neden olan) birden fazla bitişik boşluk render yoktur

Çıkış hedef başka bir şey ise, o zaman sadece temizleme çıkışını yapabilirsiniz. Diğer cevaplardan görebileceğiniz gibi, bunu yapmak için yollar sayısız vardır. output-buffering fonksiyonları almak istediğiniz güzergah olacak böylece yankı tablolar ile çalışıyoruz gibi görünüyor.

ob_start();

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

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

echo $output;

Eğer herhangi bir şey için bunu yapmak mümkün olmak istedim Eğer Çıktı tamponunu kullanabilirsiniz:

ob_start();

echo "Hello\n World";

$out = ob_get_contents();

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

Hatta denilen herhangi bir komut için bu içeren komut dosyaları eklemek için httaccess kullanabilirsiniz.

Bu stdout ayarlanır önce Ancak, sadece onunla uğraşmak değil? Gibi

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

Ne sadece bir boşluk tarafından "\n" yerine hakkında (or just nothing, if you already have one space in your incoming string)?

Bunun gibi, örneğin:

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

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

Birinci çıkış verir:

string 'Hello
World!' (length=12)

Ve ikincisi:

string 'HelloWorld!' (length=11)

Is that not enough ?
(Or maybe I don't understand the question well)

Böyle yapamazsınız:

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

Now $str will have every spaces or \n characters sequences replaced by only one space. (because if you just remove \n you migth have some place where a space is missing, and if you just replace it by a space you'll have some places with multiple spaces in a row).

EDIT: döngü gerçekten gerekli olup olmadığını bilmiyorum ama str_replace otomatik hile yapacak eğer ben burada test etmek için bir şey yok (ve ben böyle basit bir şey için regexpi kullanarak sanmıyorum ) gerçekten iyi bir fikirdir.

Bunun yerine bir backspace karakteri nasıl düşünme, ben sorunu yeniden düşünülmesini öneririm. Neden bazı çıktı geri almak istiyorsun? Eğer çok erken bunu çıkarılmaktadır muhtemelen çünkü.

Bunun yerine aracı değerlerine bir yankı yapıyor, tampon için ekledim. Sonra tampon düzenleyin. Sonra çıktı. (Örneğin, bir şeyler çıkarır dış satıcının kütüphaneyi kullanarak konum) bir çıkış üretilir olmadığını kontrol veya yapamıyorsanız, PHP çıktı tamponlama kullanıyorsanız.

Ben "benim çıktı ekranda 'ab [komik karakteri] That' olarak gösterir. - Jeff" doğrulandı.

Böyle isteyen için benim neden ben bir saniye sayacı yaptı ve linefeeds istemiyorsanız veya ekran boyunca yayılan devam olmasıdır. Kronometre, ya da herhangi bir yerinde sayacı düşünüyorum.

Bu onun tam soruya doğrudan bir cevap değil, ama başlık ima görünüyor ne: bir PHP "backspace" character, PHP CLI kullanarak zaman, muhtemelen sadece yararlı olduğu çıktısı.

Sen ASCII table üzerinde bunun için doğru ASCII kodu (ve diğer karakterleri) bulmak ve sonra da chr() veya bir kaçış sırasını kullanabilirsiniz:

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

Ben bir geri silme nasıl bilmiyorum, ama sadece yeni bir çizgi yapmak çalışıyorsanız ben kullanmak istiyorum:

echo "<br>";

PHP kodu sürece bir baskı veya yankı deyiminde kullanıldığı gibi html kodu sağlar ve çift tırnak içinde.