2012-05-14 48 views
6

Sé que hay otras formas de escapar solo comillas simples (such as this answer), pero me parece que debe haber una forma de usar htmlspecialchars().Escape solo comillas simples (deje comillas dobles) con htmlspecialchars()

Según el manual, debería ser una combinación de sus constantes, pero según sus explicaciones, no lo veo.

¿Es posible escapar solo las comillas simples, dejando solo las comillas dobles, con htmlspecialchars()?

+4

¿Por qué necesita esto? Me parece un problema. – Halcyon

+1

si solo son comillas simples, entonces use str_replace –

+0

[Esto] (http://www.php.net/manual/en/function.htmlspecialchars.php#99185) podría ayudar –

Respuesta

9
str_replace("'", "\\'", $string); 

allí.

O bien, utilizar ENT_QUOTES

htmlspecialchars($string, ENT_QUOTES); 
+1

Tengo serias dudas de que '\ '' sea la cadena de reemplazo prevista, si el objetivo es colocarlo en un documento HTML. – hvd

+0

Si intenta escapar de comillas simples, esa sería la cadena deseada. – Norse

+1

Escapar las comillas simples para ponerlo en un atributo '' '-delimited significa cambiarlas a ''' (o equivalente, si hay un equivalente, no estoy seguro).Su otra sugerencia, 'ENT_QUOTES', también convierte caracteres de comillas dobles, que la pregunta pide que dejen en paz. – hvd

1

Use htmlspecialchars (...)

Entonces str_replace (...) en una cita doble

9

Aquí está la combinación de constantes que usted está buscando.

$escaped_string = htmlspecialchars($string, ENT_QUOTES & ~ENT_COMPAT, $encoding); 

Este escaparán & ' < >, pero deja " solo. ENT_QUOTES & ~ENT_COMPAT es un lenguaje de manipulación de bits que significa "ambas comillas, menos las comillas dobles".

Esto funciona debido a cómo se definen estas constantes. php-src/ext/standard/html.h

#define ENT_HTML_QUOTE_NONE   0 
#define ENT_HTML_QUOTE_SINGLE  1 
#define ENT_HTML_QUOTE_DOUBLE  2 

#define ENT_COMPAT  ENT_HTML_QUOTE_DOUBLE 
#define ENT_QUOTES  (ENT_HTML_QUOTE_DOUBLE | ENT_HTML_QUOTE_SINGLE) 
#define ENT_NOQUOTES ENT_HTML_QUOTE_NONE 

Por qué querrías escapar comillas simples, pero no comillas dobles? Bueno, lo contrario de la razón por la que escaparía de las comillas dobles, pero no de las comillas simples: porque tiene una cadena con muchas comillas dobles " y solo unas pocas comillas simples de ', por lo que le gustaría incluirla en una ' -cadena reducida.

Un ejemplo:

<div data-myobject='<?= htmlspecialchars(json_encode($myobject), ENT_QUOTES & ~ENT_COMPAT, 'UTF-8') ?>' 

json_encode() crea un montón de comillas dobles, por lo que tiene sentido para pegar el resultado en un atributo de comilla simple delimitado, y dejar las comillas dobles sin escape.

+0

Sé que esta es una pregunta antigua y cerrada, pero no pude encontrar una respuesta a la pregunta original, por lo que decidí publicar una. – Grilse

+0

Esta debería ser la respuesta. Prefiero 'ENT_HTML5 | ENT_QUOTES & ~ ENT_COMPAT' yo mismo. – Isius

Cuestiones relacionadas