Cómo eliminar comillas simples y dobles de una cadena

Cuando ejecuto una frase que contiene comillas dobles a través de esta función, reemplaza las comillas con quot.

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; } 

Actualizar:

 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 

Parece que tu cadena original tenía los caracteres HTML para " ( " ) así que cuando intentas desinfectarla, simplemente eliminas el & y ; dejando el rest de la cadena quot .

—EDITAR—

Probablemente la forma más sencilla de eliminar caracteres no alfanuméricos sería decodificar los caracteres HTML con html_entity_decode , y luego ejecutarlo a través de la expresión regular. Dado que, en este caso, no obtendrá nada que necesite volver a codificarse, no es necesario que haga las cosas , pero vale la pena recordar que tenía datos HTML y ahora tiene datos sin codificar en bruto .

P.ej:

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

Tenga en cuenta que ENT_QUOTES marca la función para “… convertir tanto comillas dobles como simples”.

No llamaría a esa función string_sanitize() , ya que es engañosa. 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.

Puedes desnudar solo ' y " con …

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

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

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

Consulte la referencia html_entity_decode para más detalles.

Su función usa expresión regular para eliminar cualquier carácter que sea diferente de [a-zA-Z0-9], por lo que seguramente elimina cualquier “” o “”

EDITAR: bueno, de la respuesta de Hamish me doy cuenta de que su cadena es una cadena HTML, por lo que explica por qué “(& quot) se transformará en” quot “. Puede considerar reemplazar &quote primero por preg_replace o htmlspecialchars_decode .

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; }