2011-03-28 33 views
8

Cuando ejecuto una frase que contiene comillas dobles a través de esta función, se reemplazan las comillas por quot.Cómo eliminar comillas simples y dobles de una cadena

Quiero eliminarlos por completo (también comillas simples). ¿Cómo puedo alterar la función para hacer eso?

function string_sanitize($s) { 
    $result = preg_replace("/[^a-zA-Z0-9]+/", "", $s); 
    return $result; 
} 

Actualización:

Example 1: This is 'the' first example 
returns: Thisis030the039firstexample 
Errors: Warning: preg_match_all() [function.preg-match-all]: Unknown modifier '0' in C 


Example 2: This is my "second" example 
returns: Thisismyquotsecondquotexample 
Errors: Invalid express in Xpath 
+0

Esta función ya corta los dos ' 'y' '" ' – zerkms

Respuesta

12

Parece que la cadena original tenía los caracteres HTML para " (") por lo que cuando se intenta desinfectar, usted es simplemente quitar el & y ;, dejando el resto de la cadena quot.

--- --- EDITAR

Probablemente la forma más fácil de eliminar caracteres numéricos no alfa sería para decodificar los caracteres HTML con html_entity_decode, a continuación, ejecute a través de la expresión regular. Dado que, en este caso, no obtendrá nada que deba volver a codificarse, no necesita hacer htmlentities, pero vale la pena recordar que tenía datos HTML y ahora tiene datos sin cifrar .

Ej:

function string_sanitize($s) { 
    $result = preg_replace("/[^a-zA-Z0-9]+/", "", html_entity_decode($s, ENT_QUOTES)); 
    return $result; 
} 

en cuenta que ENT_QUOTES banderas de función para "... convertir las dos comillas dobles e individuales.".

+0

Oooh. Buen intento. –

+0

1 gran punto y la observación. Cualquier idea de cómo puedo despojar "e; entonces? –

+0

Editado con un ejemplo de cómo podría hacerlo. – Hamish

0

Su función utiliza expresiones regulares para eliminar cualquier carácter tan diferente de [a-zA-Z0-9], por lo que sin duda elimina cualquier corrige "el" o ''

: así, de la respuesta Hamish me di cuenta de su cadena es una cadena HTML, por lo que explica por qué "(& quot) que se transforma en 'quot'. Usted puede considerar reemplazar &quote por preg_replace, o htmlspecialchars_decode primero.

24

yo no llamaría a esa función string_sanitize(), ya que es engañoso. Podría llamarlo strip_non_alphanumeric().

Su función actual quitará cualquier cosa que no sea una letra mayúscula o minúscula o un número.

Usted puede quitar simplemente ' y " con ...

$str = str_replace(array('\'', '"'), '', $str); 
+0

solución fácil y buena – Praveen

1

Creo que su llamada preg_replace debería ser así:

$result = preg_replace("/[^a-zA-Z0-9]+/", "", html_entity_decode($s)); 

favor ver html_entity_decode reference para más detalles.

0

Para estar seguro de eliminar todo tipo de citas (incluidas aquellas en las que el lado izquierdo son diferentes de las del lado derecho), creo que debe ser algo así como;

function string_sanitize($s) { 
    $result = htmlentities($s); 
    $result = preg_replace('/^(")(.*)(")$/', "$2", $result); 
    $result = preg_replace('/^(«)(.*)(»)$/', "$2", $result); 
    $result = preg_replace('/^(“)(.*)(”)$/', "$2", $result); 
    $result = preg_replace('/^(')(.*)(')$/', "$2", $result); 
    $result = html_entity_decode($result); 
    return $result; 
} 
Cuestiones relacionadas