simples - php escape double quotes
¿Cómo escapo solo las comillas simples? (11)
Estoy escribiendo un código JavaScript que usa una cadena procesada con PHP. ¿Cómo puedo escapar de comillas simples (y solo comillas simples) en mi cadena PHP?
<script type="text/javascript">
$(''#myElement'').html(''say hello to <?php echo $mystringWithSingleQuotes ?>'');
</script>
Así es como lo hice. Tonto, pero simple
$singlequote = "''";
$picturefile = getProductPicture($id);
echo showPicture(''.$singlequote.$picturefile.$singlequote.'');
Estaba trabajando en la salida de HTML que llama código JavaScript para mostrar una imagen ...
Después de un largo tiempo luchando con este problema, creo que he encontrado la mejor solución.
Combina dos funciones que hacen posible escapar de una cadena para usar como HTML.
Uno para evitar la comilla doble si usa la cadena dentro de una llamada a la función de JavaScript, y otra para escapar de la comilla simple para evitar las comillas simples que rodean el argumento.
Solución:
mysql_real_escape_string(htmlspecialchars($string))
Resolver:
- un php creado para llamar a una función de JavaScript como
echo ''onclick = "javascript_function (/' ''. mysql_real_escape_string (htmlspecialchars ($ string))"
En algunos casos, simplemente lo convierto en ENTIDADES:
//i.e. $x= ABC/DEFGH''IJKL
$x= str_ireplace("''", "'", $x);
$x= str_ireplace("//", "\", $x);
$x= str_ireplace(''"'', """, $x);
en la página HTML, la salida visual es la misma:
ABC/DEFGH''IJKL
sin embargo, se desinfecta en fuente.
Escribí la siguiente función. Reemplaza lo siguiente:
Single Quote [''] con barra inclinada y comillas simples [/']
Barra invertida [/] con dos barras diagonales inversas [//]
function escapePhpString($target) {
$replacements = array(
"''" => ''///''',
"//" => ''////'
);
return strtr($target, $replacements);
}
Puede modificarlo para agregar o eliminar reemplazos de caracteres en la matriz $ replacements. Por ejemplo, para reemplazar / r / n se convierte en "/ r / n" => "/ r / n" y "/ n" => "/ n".
/**
* With new line replacements too
*/
function escapePhpString($target) {
$replacements = array(
"''" => ''///''',
"//" => ''////',
"/r/n" => "//r//n",
"/n" => "//n"
);
return strtr($target, $replacements);
}
La característica clara sobre strtr es que preferirá reemplazos largos. Por ejemplo, "Cool / r / nFeature" escapará / r / n en lugar de escaparse / n a lo largo.
No estoy seguro de qué está haciendo exactamente con sus datos, pero siempre podría intentar:
$ string = str_replace ("''", "% 27", $ cadena);
Lo uso cuando las cadenas se envían a una base de datos para su almacenamiento. % 27 es la codificación del carácter ''y también ayuda a evitar la interrupción de las solicitudes GET si hay un solo carácter'' contenido en una cadena enviada a su servidor. Reemplazaría ''con% 27 tanto en JavaScript como en PHP, solo en caso de que alguien intente enviar manualmente algunos datos a su función de PHP. Para hacerlo más bonito para su usuario final, simplemente ejecute una función de reemplazo inverso para todos los datos que obtenga de su servidor y reemplace todas las subcadenas% 27 con ''.
Feliz inyección evitando!
Para reemplazar solo las comillas simples, use esta simple declaración:
$string = str_replace("''","//'", $string);
Sé que llego tarde a la fiesta. Pero puedes utilizar la función de addcslashes para que esto se haga como tal,
echo addcslashes($text, "''//");
Sencillamente: echo str_replace(''/''', ''///''', $myString);
Sin embargo, sugeriría el uso de la función JSON y json_encode()
ya que será más confiable (por ejemplo, comillas nuevas líneas):
<?php $data = array(''myString'' => ''...''); ?>
<script>
var phpData = <?php echo json_encode($data) ?>;
alert(phpData.myString);
</script>
Si desea escapar de los caracteres con un /
tiene addcslashes()
por ejemplo, si desea escapar solo las comillas simples, como la pregunta que puede hacer:
echo addcslashes($value, "''");
Y si quiere escapar ''
, "
, /
y nul
(el byte nulo) puede usar addslashes()
:
echo addslashes($value);
Use la función nativa htmlspecialchars
escapará de todos los charectores especiales. si quieres escapar de quate específicamente, usa ENT_COMPAT
o ENT_QUOTES
. Aquí está el ejemplo.
$str = "Jane & ''Tarzan''";
echo htmlspecialchars($str, ENT_COMPAT); // Will only convert double quotes
echo "<br>";
echo htmlspecialchars($str, ENT_QUOTES); // Converts double and single quotes
echo "<br>";
echo htmlspecialchars($str, ENT_NOQUOTES); // Does not convert any quotes
La salida sería así
Jane & ''Tarzan''<br>
Jane & 'Tarzan'<br>
Jane & ''Tarzan''
Lea más aquí, https://www.w3schools.com/php/func_string_htmlspecialchars.asp
str_replace("''", "/'", $mystringWithSingleQuotes);