2009-07-28 13 views
9

que estoy usando wmd editor de rebaja en un proyecto y tenía una pregunta:armas de destrucción masiva editor de rebajas - HTML a la conversión de rebajas

Cuando publico el formulario que contiene el área de texto de rebajas, que (como se esperaba) mensajes HTML al servidor . Sin embargo, al momento de la validación del lado del servidor, algo falla y necesito enviar al usuario de nuevo a editar su entrada, ¿hay alguna forma de volver a llenar el área de texto con solo el descuento y no el html? Desde que lo tengo configurado, el servidor solo tiene acceso a los datos de la publicación (que tiene forma de html) por lo que parece que no se me ocurre una manera de hacerlo. ¿Algunas ideas? Preferiblemente una solución no basada en javascript.

Actualización: Encontré un convertidor html to markdown llamado markdownify. Supongo que esta podría ser la mejor solución para mostrar el descuento al usuario ... ¡cualquier alternativa mejor es bienvenida!

Actualización 2: Encontré this publico en SO y supongo que hay una opción para enviar los datos al servidor como marcado en lugar de html. ¿Hay inconvenientes para simplemente almacenar los datos como un descuento en la base de datos? ¿Qué pasa con volver a mostrarlo al usuario (fuera de un editor)? Tal vez sería mejor para fijar las dos versiones (HTML y rebajas) al servidor ...

resuelto: puedo simplemente usar php markdown para convertir la reducción del precio de serverside html.

Respuesta

4

Sugiero que simplemente envíe y almacene el texto como Markdown. Esto parece ser lo que ya has decidido. IMO, almacenar el texto como Markdown será mejor porque puede quitar todas las etiquetas HTML sin preocuparse por la pérdida de formato; esto hace que su código sea más seguro, porque será más difícil usar un ataque XSS (aunque aún puede ser posible) - Solo digo que esta parte será saf er).

+0

¿No sería quitar todas las etiquetas HTML causa un problema si el texto contiene un ejemplo HTML? –

+0

Quizás, pero solo es cuestión de asegurarse de no pelar ninguna etiqueta dentro de un bloque de código. –

+1

Sólo código HTML. No creo que ninguno de los caracteres de rebajas esté reservado html. –

2

Una cosa a tener en cuenta es que las armas de destrucción masiva parecen tener ciertos casos de borde diferentes de ciertas implementaciones de Markdown del lado del servidor. Definitivamente, he visto algunos caprichos en las vistas previas aquí que han aparecido de manera diferente después de la sumisión (creo que uno de esos casos estaba tratando de escapar de un retruécano rodeado de palos de atrás). Al enviar la vista previa convertida a través del cable, puede asegurarse de que la vista previa sea precisa.

No estoy diciendo que deba tomar su decisión, pero es algo a tener en cuenta.

0

Pruebe Pandoc. Es un poco más completo y confiable que Markdownify.

0

El código HTML que está viendo es solo una vista previa, por lo que no es una buena idea almacenarlo en la base de datos ya que se encontrará con problemas cuando intente editarlo. Tampoco es una buena idea almacenar ambas versiones (rebajas y HTML) ya que el HTML es solo una interpretación y tendrá los mismos problemas de edición y mantenimiento de ambas versiones sincronizadas.

Por lo tanto, la mejor idea es almacenar el descuento en el archivo db y luego convertirlo al lado del servidor antes de mostrarlo.

Puede usar PHP Markdown para este fin. Sin embargo, esto no es una conversión 100% perfecta de lo que está viendo en el lado de JavaScript y puede necesitar algunos ajustes.

La versión que está usando el Stack Exchange network es una implementación de C# y debe haber una implementación de Python que haya descargado con la versión de wmd que tenga.

Lo único que pellizcado era la manera nuevas líneas se volvieron así que cambié esto en markdown.php para convertir algunas nuevas líneas en <br> partir de la línea 626 en la versión que tiene:

var $span_gamut = array(
# 
# These are all the transformations that occur *within* block-level 
# tags like paragraphs, headers, and list items. 
# 
    # Process character escapes, code spans, and inline HTML 
    # in one shot. 
    "parseSpan"   => -30, 

    # Process anchor and image tags. Images must come first, 
    # because ![foo][f] looks like an anchor. 
    "doImages"   => 10, 
    "doAnchors"   => 20, 

    # Make links out of things like `<http://example.com/>` 
    # Must come after doAnchors, because you can use <and> 
    # delimiters in inline links like [this](<url>). 
    "doAutoLinks"   => 30, 
    "encodeAmpsAndAngles" => 40, 

    "doItalicsAndBold" => 50, 
    "doHardBreaks"  => 60, 
    "doNewLines"   => 70, 
    ); 

function runSpanGamut($text) { 
# 
# Run span gamut tranformations. 
# 
    foreach ($this->span_gamut as $method => $priority) { 
     $text = $this->$method($text); 
    } 

    return $text; 
} 

function doNewLines($text) { 
    return nl2br($text); 
} 
Cuestiones relacionadas