2012-02-24 6 views
22

Questo non funziona:Come rilevare se una stringa ha una nuova interruzione di riga in essa?

$string = 'Hello 
    world'; 

if(strpos($string, '\n')) { 
    echo 'New line break found'; 
} 
else { 
    echo 'not found'; 
} 

Ovviamente perché la stringa non ha il "\ n" carattere in esso. Ma in quale altro modo posso verificare se c'è un'interruzione di riga che è il risultato dell'utente che preme entrare in un campo modulo?

+1

provare a sostituire '\ n' con PHP_EOL. –

+2

Forse dovresti usare le virgolette doppie: '" \ n "' o 'preg_match ('/ [\ n \ r] /')' – biziclop

+0

Ti stai chiedendo come inviare un modulo quando premono Invio? Se è così, non sarà necessario. Finché il pulsante di invio ha fatto il pulsante di invio, dovrebbe inviarlo su un invio. – CoffeeRain

risposta

50

Il test esistente non funziona perché non si utilizzano virgolette attorno al carattere di interruzione di riga ('\n'). Cambiarlo in:

if(strstr($string, "\n")) {

Oppure, se si desidera che la compatibilità del sistema cross-operativo:

if(strstr($string, PHP_EOL)) {

Si noti inoltre che strpos torneranno 0 e la sua dichiarazione valuterà FALSE se il primo il carattere è \n, quindi strstr è una scelta migliore. In alternativa si potrebbe modificare l'utilizzo strpos a:

if(strpos($string, "\n") !== FALSE) { 
    echo 'New line break found'; 
} 
else { 
    echo 'not found'; 
} 
+2

Non dipende dal computer dell'utente, piuttosto che dal server, quali terminazioni di linea si ricevono dall'utente caro? – biziclop

+0

Sto parlando a grandi linee ... Provo a usare sempre 'PHP_EOL', quindi il mio codice funziona in ogni situazione. Ma hai ragione se hai a che fare con dati provenienti da un utente. – rdlowrey

+3

Questa è una cattiva risposta perché PHP_EOL varia tra i sistemi operativi. – kjdion84

3

linea di rottura è \r\n sulle finestre e sulle macchine UNIX è \n. quindi la ricerca di PHP_EOL invece di "\ n" per la compatibilità tra i sistemi operativi incrociati o la ricerca di entrambi "\ r \ n" e "\ n".

+1

Se entrambe le interruzioni di riga contengono '\ n', allora devi solo cercare' \ n' per essere compatibile con il sistema operativo trasversale - in modo da "rilevare" semplicemente le interruzioni di riga. – MrWhite

Problemi correlati