2009-07-28 9 views
9

Tôi đang sử dụng wmd biên tập markdown trên một dự án và đã có một câu hỏi:WMD biên tập markdown - HTML để chuyển đổi Markdown

Khi tôi đăng các hình thức có chứa các vùng văn bản markdown, nó (như mong đợi) bài viết html vào máy chủ . Tuy nhiên, nói khi xác nhận phía máy chủ một cái gì đó không thành công và tôi cần phải gửi người dùng trở lại để chỉnh sửa mục nhập của họ, là có anyway để nạp tiền các textarea chỉ với markdown và không phải là html? Vì tôi đã thiết lập, máy chủ chỉ có quyền truy cập vào dữ liệu bài đăng (dưới dạng html) nên tôi không thể nghĩ ra cách để làm điều này. Bất kỳ ý tưởng? Tốt hơn là một giải pháp không dựa trên javascript.

Cập nhật: Tôi tìm thấy trình chuyển đổi html thành markdown có tên là markdownify. Tôi đoán đây có thể là giải pháp tốt nhất để hiển thị markdown trở lại cho người dùng ... bất kỳ lựa chọn thay thế tốt hơn được chào đón!

Cập nhật 2: Tôi tìm thấy this đăng trên SO và tôi đoán có tùy chọn gửi dữ liệu đến máy chủ dưới dạng markdown thay vì html. Có bất kỳ nhược điểm nào để lưu trữ dữ liệu đơn giản dưới dạng đánh dấu trong cơ sở dữ liệu không? Điều gì về hiển thị nó trở lại cho người dùng (bên ngoài của một trình soạn thảo)? Có thể tốt nhất là đăng cả hai phiên bản (html AND markdown) lên máy chủ ...

SOLVED: Tôi chỉ có thể sử dụng php markdown để chuyển đổi markdown thành html serverside.

Trả lời

4

Tôi khuyên bạn chỉ nên gửi và lưu trữ văn bản dưới dạng Đánh dấu. Điều này có vẻ là những gì bạn đã giải quyết trên đã. IMO, lưu trữ văn bản dưới dạng Markdown sẽ tốt hơn vì bạn có thể xóa tất cả các thẻ HTML một cách an toàn mà không phải lo lắng về việc mất định dạng - điều này làm cho mã của bạn an toàn hơn, vì sẽ khó sử dụng tấn công XSS hơn (mặc dù nó vẫn có thể thực hiện được) - Tôi chỉ nói rằng phần này sẽ được an toàn er).

+0

Sẽ không phải tước tất cả các thẻ HTML gây ra vấn đề nếu văn bản chứa một ví dụ HTML? –

+0

Có lẽ, nhưng sau đó nó chỉ là vấn đề đảm bảo rằng bạn không loại bỏ bất kỳ thẻ từ bên trong một khối mã. –

+1

Chỉ cần mã hóa HTML. Tôi không nghĩ bất kỳ ký tự markdown nào là html được dành riêng. –

2

Một điều cần xem xét là WMD dường như có các trường hợp cạnh khác nhau nhất định từ một số triển khai Markdown phía máy chủ nhất định. Tôi đã chắc chắn nhìn thấy một số quirks trong các bản xem trước ở đây đã hiển thị khác nhau sau khi trình (Tôi tin rằng một trong những trường hợp đã cố gắng để thoát khỏi một backtick bao quanh bởi backticks). Bằng cách gửi bản xem trước được chuyển đổi qua dây, bạn có thể đảm bảo rằng bản xem trước là chính xác.

Tôi không nói rằng nên đưa ra quyết định của bạn, nhưng đó là một cái gì đó để xem xét.

0

Dùng thử Pandoc. Đó là một chút toàn diện hơn và đáng tin cậy hơn Markdownify.

0

HTML bạn đang xem chỉ là bản xem trước, do đó, bạn không nên lưu trữ nó trong cơ sở dữ liệu vì bạn sẽ gặp sự cố khi bạn cố chỉnh sửa. Nó cũng không phải là một ý tưởng tốt để lưu trữ cả hai phiên bản (markdown và HTML) như HTML chỉ là một giải thích và bạn sẽ có cùng một vấn đề chỉnh sửa và giữ cả hai phiên bản đồng bộ.

Vì vậy, ý tưởng tốt nhất là lưu trữ đánh dấu trong db và sau đó chuyển đổi phía máy chủ trước khi hiển thị.

Bạn có thể sử dụng PHP Markdown cho mục đích này. Tuy nhiên điều này không phải là 100% hoàn hảo chuyển đổi của những gì bạn đang nhìn thấy ở phía bên javascript và có thể cần một số tinh chỉnh.

Phiên bản Stack Exchange network đang sử dụng là triển khai C# và phải có triển khai python bạn đã tải xuống với phiên bản wmd bạn có.

Một trong những điều tôi chỉnh là cách dòng mới được trả lại vì vậy tôi thay đổi này trong markdown.php để chuyển đổi một số dòng mới vào <br> bắt đầu từ dòng 626 trong phiên bản tôi có:

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); 
}