2012-08-14 15 views
8

Io uso jQuery per contare il valore di una textarea al volo:.ottenere lo stesso risultato per PHP `` str_len come per jQuery `.VAL() Lunghezza()`

function count_chars() { 
    count_chars=$('#text_textarea').val().length; 
} 

... poi su inviare serializzare il modulo, inviare il testo della textarea tramite ajax a un file php che poi convalida il testo sul lato server. Tuttavia, ho avuto problemi con newline e spazi.

Ovviamente, se ottengo il testo "così com'è" dalla textarea, php conterrà ogni nuova riga come due o 4 caratteri (\n, ...). Così ho cercato di sostituirli con qualcosa di simile:

strlen(str_replace(array("\r", "\n"), ' ', $text))) 

o questo:

strlen(preg_replace('/\s+/', ' ', trim($text))) 

Tuttavia, se ho ottenuto per esempio 10 paragrafi e jQuery restituisce 2500 caratteri, php restituirà 2510 o 2490, a seconda che sostituisca nuove linee con uno spazio o le rimuova completamente. Quindi la differenza è 20, ma ci sono solo 10 nuove linee ...?

Cosa mi manca? Come posso ottenere php per restituire lo stesso risultato di jQuery? Dov'è il problema, in php o in jQuery?

+0

Quale codifica di carattere usi? Su quale sistema operativo viene eseguito il tuo client? (Windows utilizza terminazioni di linea diverse da Unix). – Maerlyn

+0

@Maerlyn: beh, funzionerà su un server web dove non ho idea in questo momento se è Windows o Linux, è solo hosting condiviso ... il set di caratteri è utf8, ma è importante qui? – Chris

+0

Probabilmente dovrai normalizzare i line feed in entrambi i posti. Non penso che tu possa controllare quale browser inserisce per impostazione predefinita quando l'utente fa clic su "Invio". –

risposta

3

Questo dovrebbe funzionare:

strlen(str_replace("\r", '', $text))) 

Spiegazione:

strlen(str_replace(array("\r", "\n"), ' ', $text)))

Qui, si sta sostituendo \ r \ n con uno spazio, in modo che il conteggio dei caratteri non cambia .

strlen(preg_replace('/\s+/', ' ', trim($text)))

Qui si stanno riducendo gli spazi continuo in un unico ' '.

+2

Puoi spiegargli perché '/ \ s + /' non fa il trucco qui . Cioè con '/ \ s + /' stava collassando gli spazi. E andrò con 'preg_replace ('/ (?: \ R | \ n) /', '', trim ($ text))' solo per essere sicuro. – Prusse

+0

@Prusse si, fatto! – Dogbert

+0

grazie, Dogbert! Mi dà ancora risultati sbagliati, sfortunatamente. Ho digitato 12345, quindi 5 spazi e 5 nuove linee - jQuery ha detto 15, php ha detto 20 ... – Chris

Problemi correlati