none
evitar interpretar entidades html RRS feed

  • Pregunta

  • ¿Como evito que el navegador me interprete las entidades html?

    Me explico:

    Tengo un combo que cargo desde una lista de strings en memoria,dentro de esas strings a veces viene el caracter > y a veces >

    ¿como puedo hacer que el combo muestre siempre lo que lee tal cual?

    Cuando venga > que muestre > con el caracter "mayor que" no tengo problemas pero con las entidades html no hay manera.

    PD : no vale <pre></pre>, ni WebUtility.HtmlEncode, ni HttpUtility.HtmlAttributeEncode, ni HttpUtility.HtmlEncode, ni Encoding.ASCII.GetString, ni Encoding.UTF-8.GetString, ni Encoding.Default.GetBytes
    PD2 : tampoco vale un replace,ya que despues tengo que pasar por post el valor que hay en el combo y guardarlo en BD tal cual esta en la lista en memoria.

    Saludos y gracias.

    martes, 14 de enero de 2014 17:11

Respuestas

  • Bueno, @Html.Raw(variable) no interpreta nada, lo que hace es pasar la variable al navegador literalmente, tal como la encuentre sin cambiar absolutamente nada. Y en todo caso será el navegador el que luego interprete ese HTML en caso de que contenga algo "interpretable", que no haya sido previamente "escapado" en el texto contenido en la variable. Así que depende de lo que hayas metido dentro de la variable, por ejemplo, si pone "&gt;" se verá como ">" y si quieres que se vea en pantalla "&gt;" lo que hay que meter dentro de la variable es "&amp;gt;"

    Este último efecto (que se vea "&gt;") puede conseguirse por el simple método de quitar el @Html.Raw y poner simplemente @variable. En este caso el motor Razor introduce los "escapes".

    Y claro está, si algunas de las partes de la variable tiene que ir escapada y otras no, entonces o bien escapas tú por código las partes pertinentes, o lo separas en varias variables y unas de ellas las escribes con Html.Raw y las otras no.

    • Marcado como respuesta polaries miércoles, 15 de enero de 2014 14:50
    miércoles, 15 de enero de 2014 9:13

Todas las respuestas

  • El remedio es que en el combo separes el texto y el valor. En el valor, mete el dato exacto que quieres luego tomar para guardarlo en BD. Y en cambio, en el texto, que es lo que se ve en pantalla, pasa por cualquiera de los métodos que has indicado (por ejemplo, hazle un Replace, o un HtmlEncode). Este texto sólo se envía en el post si no has configurado nada en el Value, pero si en el Value metiste el texto sin modificar, te llegará correctamente en el post.

    Ejemplo de cargar las dos cosas:

    string dato="<b>Hola</b>";
    ListItem li = new ListItem(Server.HtmlEncode(dato), dato);
    dropDownList1.Items.Add(li);

    martes, 14 de enero de 2014 18:54
  • No es eso,pero gracias a tu respuesta me parece que ya se porque es,jjjjjjjjj.

    Estoy metiendo el codigo del combo dentro de un string y pasandolo a la vista por ViewBag,despues pongo ese codigo en la vista con html.Raw,y esto es lo que hace que las entidades html no salgan tal cual,es igual que ponga el value como tu dices,html.Raw me va a interpretar las entidades si o si.

    y ahora viene otra pregunta :

    ¿como hago para que html.Raw no interprete las entidades html?

    Gracias y saludos.

    miércoles, 15 de enero de 2014 8:39
  • Bueno, @Html.Raw(variable) no interpreta nada, lo que hace es pasar la variable al navegador literalmente, tal como la encuentre sin cambiar absolutamente nada. Y en todo caso será el navegador el que luego interprete ese HTML en caso de que contenga algo "interpretable", que no haya sido previamente "escapado" en el texto contenido en la variable. Así que depende de lo que hayas metido dentro de la variable, por ejemplo, si pone "&gt;" se verá como ">" y si quieres que se vea en pantalla "&gt;" lo que hay que meter dentro de la variable es "&amp;gt;"

    Este último efecto (que se vea "&gt;") puede conseguirse por el simple método de quitar el @Html.Raw y poner simplemente @variable. En este caso el motor Razor introduce los "escapes".

    Y claro está, si algunas de las partes de la variable tiene que ir escapada y otras no, entonces o bien escapas tú por código las partes pertinentes, o lo separas en varias variables y unas de ellas las escribes con Html.Raw y las otras no.

    • Marcado como respuesta polaries miércoles, 15 de enero de 2014 14:50
    miércoles, 15 de enero de 2014 9:13
  • Ole tu!.....jjjjj

    pues funcionó,usé replace para convertir lor &gt; por &amp;gt; y luego cuando lo voy a grabar a BD convierto de nuevo los &amp;gt; en &gt;

    He seguido usando @Html.Raw(variable)

    Gracias.

    miércoles, 15 de enero de 2014 14:50