2009-10-12 28 views
6

Estoy intentando envolver una cadena introducida por el usuario entre comillas para la salida, pero quiero asegurarme de que no termine con comillas dobles dobles a cada lado de la cadena. Por ejemplo, si un usuario publicaPHP Ajustar una cadena entre comillas dobles

"Hola"

no quiero convertirlo en

"" Hola ""

que pueda hazlo con bastante facilidad usando el siguiente código; sin embargo, me preocupa que esto pueda volverse lento si estoy recorriendo muchas cadenas.

$string = '"'.trim($string,'"').'"'; 

Si alguien tiene una mejor manera de hacerlo, sería genial. Igualmente, si alguien puede confirmar que mi camino está bien, seré feliz.

Gracias

+1

¿Dónde está usted usando esta cadena? ¿Es HTML, Javascript o parte consulta SQL? –

+0

Solo asegúrese de que no haya ningún caso en el que el usuario utilice comillas en el texto que luego también se recortarán, pero tal vez no debería ser así. – markus

+0

Y: esta es una cita: '' '- esta es una comilla doble' "' - estás usando estos términos ligeramente incorrectos – markus

Respuesta

10

Esto es exactamente cómo iba a resolver este problema. Solo vale la pena preocuparse porque el código sea lento si tiene un problema con la aplicación que es lenta, y puede rastrearlo hasta las declaraciones de ajuste.

Una cita de programación bien conocida es "Premature Optimisation es la raíz de todo mal" - ver el artículo de la wikipedia vinculado para obtener más información al respecto.

+0

Buen artículo, I ' Le doy las gracias. Gracias, – Rowan

2

Personalmente, sugiero quitar las comillas en la entrada. En cuanto a hacerlo más rápido, si permite ingresar o guardar las comillas, siempre tendrá que utilizar un if/else antes de mostrarlas.

Obviamente, aún debe realizar una verificación de la cordura de los datos de entrada, independientemente del sistema con el que termine.

+0

, gracias por su respuesta, estoy de acuerdo, pero el sistema en el que estoy trabajando fue creado parcialmente por otra persona, así que tengo que trabajar con datos horribles. ¡Eventualmente lo desinfectaré! – Rowan

0

Es una práctica común el uso de las comillas para representar una cita dentro de un presupuesto, si desea que sus usuarios puedan escribir:
y ella dijo "hey ho"

, que se podría convertir en:
Usuario: "y ella dijo 'hey ho'"

3

Tenga en cuenta cuidadosamente lo que debería suceder con todos los casos. (usando [] como comillas para legibilidad)

Has dicho lo que haces para ["Hola"] pero ¿qué haces para [Dije "Hola", punk]? ¿Todavía quita las cotizaciones de entrada de usuario o las elimina? O tal vez vaya un paso más allá y sustituya las comillas simples por comillas dobles ... ¡pero entonces debería considerar los casos en los que la entrada del usuario contiene comillas simples y dobles! ¿Qué pasa cuando el usuario introduce un texto "gramaticalmente incorrecto" como ["Hola" (sin cita de cierre)]

La mejor manera de asegurarse de que lo haga bien es hacer una prueba de cada borde que se pueda imaginar y asegúrese de que su solución propuesta realmente haga lo que se espera.

Si el motivo real de este requisito es [Estoy recibiendo la opinión de un usuario en algún momento y luego se la vuelvo a mostrar en otro punto, y no quiero mostrarles datos estúpidos como ["" data ""]], probablemente solo quiera eliminar las comillas dobles del inicio o el final de la cadena de entrada, ya que las elimina de los tornillos del medio con los datos deseados por el usuario.

Si su objetivo es simplemente distinguir claramente entre su entrada y el texto que no ingresaron, considere utilizar otros medios para resaltar eso en lugar de comillas. Por lo tanto, en lugar de [ingresó "datos"], puede visualizar [ingresó datos] o [ingresó: datos] que evitan por completo este problema.

+0

+1 para pruebas de casos de uso, un buen punto que me da vergüenza haber perdido en mi propia respuesta ... = / –

0

lo hice de esta manera:

function quotize(&$string) 
{ 
    if (empty($string) || is_null($string)) { 
     return; 
    } 

    $char = '"'; 
    if ($string[0] != $char) { 
     $string = $char . $string; 
    } 

    if (substr($string, -1) != $char) { 
     $string .= $char; 
    } 

    return; 
} 
Cuestiones relacionadas