Il carattere PHP "backspace" durante l'output è ansible?

Ho la sensazione che la risposta sia "non è ansible", ma ho pensato di chiedere di soddisfare la mia curiosità.

Ho un codice che fa eco where \ n è inevitabile:

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

Mi piacerebbe che la row leggesse semplicemente (nell'output del codice):

Ciao mondo!

… rimuovendo così \ n.

Quindi mi stavo chiedendo se è ansible eseguire un carattere "backspace" durante l'output di PHP?

Qualcosa di semplice come str_replace( "\n", 'backspace-character', $str );

Sì, il carattere backspace è il codice carattere ASCII 8 (in base alla tabella ASCII ), quindi puoi emetterlo in php usando chr () . per esempio:

 echo 'ab' . chr(8); 

uscirà "a"

Se il target di output è HTML, gli spazi extra non contano: i browser non rendono più spazi contigui (ecco perché abbiamo   )

Se l'objective di output è un'altra cosa, puoi semplicemente pulire l'output. Come puoi vedere da altre risposte, ci sono una miriade di modi per farlo. Sembra che tu stia lavorando con le istruzioni echo in modo che le funzioni di buffering dell'output siano la route che vuoi intraprendere.

 ob_start(); echo "Hello \n"; echo "World!"; $output = preg_replace( "/ +/", ' ', str_replace( "\n", ' ', ob_get_clean() ) ); echo $output; 

Se si voleva essere in grado di farlo per qualsiasi cosa si potesse usare il buffer di output:

 ob_start(); echo "Hello\n World"; $out = ob_get_contents(); ob_end_clear(); echo str_replace('\n', '', $out); 

Si potrebbe anche usare httaccess per aggiungere script che lo contengono a qualsiasi script chiamato.

Tuttavia, non potresti semplicemente occupartene prima che sia impostato su stdout? Piace

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

Questa non è una risposta diretta alla sua domanda esatta, ma a ciò che il titolo sembra alludere a: emettere un carattere "backspace" di PHP , che è probabilmente utile solo quando si usa la CLI di PHP.

È ansible trovare il codice ASCII corretto per questo (e altri caratteri) nella tabella ASCII e quindi utilizzare chr () o una sequenza di escape:

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

Che dire semplicemente sostituendo " \n " con uno spazio bianco (o semplicemente nulla, se hai già uno spazio nella string in arrivo) ?

Ad esempio, ad esempio:

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

Il primo risultato dà:

 string 'Hello World!' (length=12) 

E il secondo:

 string 'HelloWorld!' (length=11) 

Non è abbastanza?
(O forse non capisco bene la domanda)

Non puoi farlo in questo modo:

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

Ora $str avrà each spazio o sequenza di caratteri sostituita da un solo spazio. (perché se ti rimuovi, puoi avere un posto where manca uno spazio, e se lo sostituisci semplicemente con uno spazio avrai dei posti con più spazi di fila).

EDIT: non so se il loop è veramente necessario ma non ho nulla da testare qui se str_replace eseguirà automaticamente il trucco (e non penso che usare regexp per una cosa così semplice sia davvero una buona idea) .

Invece di pensare a come fare un carattere backspace, suggerirei di ripensare al problema. Perché vuoi riprendere parte della tua produzione? Probabilmente perché l'hai fatto uscire troppo presto.

Invece di fare un eco sui valori dell'intermediario, aggiungili al buffer. Quindi modifica il buffer. Quindi printinglo. Se non riesci a controllare se l'output è stato prodotto o less (ad esempio, stai utilizzando la libreria di un fornitore esterno che genera roba), utilizza il buffer di output PHP.

Non so come fare un backspace, ma se stai solo provando a fare una nuova row, userei:

 echo "<br>"; 

Il codice PHP consente il codice html purché venga utilizzato in un'istruzione print o echo e si trova tra virgolette doppie.