yo tengo
@str = "<b>Hi</b>"
y en mi opinión erb:
<%= @str %>
Lo que se mostrará en la página es: <b>Hi</b>
cuando lo que realmente quiero es Hola . ¿Cuál es la forma rubí de "interpretar" una cadena como marcado HTML?
Editar : el caso donde
@str = "<span class=\"classname\">hello</span>"
Si en mi opinión lo hago
<%raw @str %>
El código fuente HTML es <span class=\"classname\">hello</span
> donde lo que realmente quiero es <span class="classname">hello</span>
(sin las barras invertidas que se escapaban de las comillas dobles). ¿Cuál es la mejor manera de "escapar" de esas comillas dobles?
%Q["quotation marks"] => "\"quotation marks\""
Fuente: en.wikibooks.org/wiki/Ruby_Programming/Syntax/… No sé si eso ayuda.Respuestas:
ACTUALIZAR
Por razones de seguridad, se recomienda usar en
sanitize
lugar dehtml_safe
. EnlaceLo que sucede es que, como medida de seguridad, Rails está escapando de su cadena porque podría tener código malicioso incrustado en ella. Pero si le dice a Rails que su cadena es
html_safe
, la pasará de inmediato.O
Usar
raw
funciona bien, pero todo lo que hace es convertir la cadena en una cadena y luego llamar a html_safe. Cuando sé que tengo una cadena, prefiero llamar a html_safe directamente, porque omite un paso innecesario y deja en claro lo que está sucediendo. Los detalles sobre el escape de cadenas y la protección XSS se encuentran en este Asciicast .fuente
raw
. Muy contento de saber sobre esto!Use crudo :
Pero como dice correctamente @ jmort253, considere dónde pertenece realmente el HTML.
fuente
Si
rails
utiliza Erubis , la mejor manera de hacerlo esTenga en cuenta el doble signo igual. Consulte la pregunta relacionada sobre SO para obtener más información.
fuente
También puede usar el
simple_format(@str)
que elimina el código malicioso. Lea más aquí: http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_formatfuente
Estás mezclando tu lógica de negocios con tu contenido. En cambio, recomendaría enviar los datos a su página y luego usar algo como JQuery para colocar los datos donde los necesite.
Esto tiene la ventaja de mantener todo su HTML en las páginas HTML a las que pertenece para que sus diseñadores web puedan modificar el HTML más tarde sin tener que pasar por el código del lado del servidor.
O si no quieres usar JavaScript, puedes probar esto:
Al menos de esta manera, su HTML está en la página HTML a la que pertenece.
fuente
O puede probar el método CGI.unescapeHTML .
fuente
ya que está traduciendo y seleccionando su código deseado del archivo codificado de una persona, ¿podría usar content_tag, en combinación con sus expresiones regulares?
Al robar los documentos de la API, puede interpolar este código traducido en un me
content_tag
gusta:Sin conocer su código, este tipo de pensamiento se asegurará de que su código traducido sea demasiado compatible.
fuente
Solución: use comillas dobles dentro de comillas simples (o simples dentro de dobles) para evitar escapar con una barra diagonal inversa.
fuente
La versión html_safe funciona bien en Rails 4 ...
fuente