2012-08-14 4 views
8

utilizo jQuery para contar el valor de un área de texto sobre la marcha:.Obtener mismo resultado para php `` str_len como para jQuery `.val() longitud()`

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

... entonces envíe serializar el formulario, envíe el texto del área de texto vía ajax a un archivo php que luego valida el texto en el lado del servidor. Sin embargo, tengo problemas con líneas nuevas y espacios.

Por supuesto, si acabo de obtener el texto "tal como está" del área de texto, php contará cada nueva línea como dos o 4 caracteres (\n, ...). Así que traté de reemplazarlos con algo como esto:

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

o esto:

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

Sin embargo, si por ejemplo, llegué 10 párrafos y jQuery devuelve 2500 caracteres, php devolverá 2510 o 2490, dependiendo de si reemplazo líneas nuevas con un espacio o las elimino por completo. Entonces la diferencia es 20, pero solo hay 10 líneas nuevas ...?

¿Qué me estoy perdiendo? ¿Cómo puedo obtener php para devolver el mismo resultado que jQuery? ¿Dónde está el problema, en php o en jQuery?

+0

¿Qué codificación de caracteres usas? ¿En qué SO se ejecuta tu cliente? (Windows usa diferentes finales de línea que Unix). – Maerlyn

+0

@Maerlyn: bueno, se ejecutará en un servidor web donde no tengo ni idea ahora si es Windows o Linux, es solo alojamiento compartido ... el conjunto de caracteres es utf8, pero ¿importa aquí? – Chris

+0

Probablemente tendrá que normalizar los avances de línea en ambos lugares. No creo que pueda controlar qué navegador se inserta de manera predeterminada cuando el usuario haga clic en "Volver". –

Respuesta

3

Esto debería funcionar:

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

Explicación:

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

Aquí, usted está reemplazando \ r \ n con un espacio, por lo que el recuento de caracteres en realidad no cambia .

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

Aquí están reduciendo los espacios en blanco continuo en una sola ' '.

+2

Puedes explicarle por qué '/ \ s + /' no funciona bien aquí . Eso es con '/ \ s + /' estaba colapsando los espacios. E iré con 'preg_replace ('/ (?: \ R | \ n) /', '', trim ($ text))' solo para estar seguro. – Prusse

+0

@Prusse sí, hecho! – Dogbert

+0

gracias, Dogbert! Todavía me da resultados incorrectos, desafortunadamente. Escribí 12345, luego 5 espacios y 5 líneas nuevas - jQuery dijo 15, php dijo 20 ... – Chris

Cuestiones relacionadas