A long-lived project that still receives updates
A simple library for converting HTML into plain text.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

Runtime

>= 1.4.0
 Project Readme

HTML To Plain Text

Continuous Integration Ruby Style Guide Gem Version

A simple gem that provide code to convert HTML into a plain text alternative. Line breaks from HTML block level elements will be maintained. Lists and tables will also maintain a little bit of formatting.

  • Line breaks will be approximated using the generally established default margins for HTML tags (i.e.

    tag generates two line breaks,

    generates one)
  • Lists items will be numbered or bulleted with an asterisk

  • tags will add line breaks

  • tags will add a string of hyphens to serve as a horizontal rule
  • elements will enclosed in "|" delimiters
  • tags will have the href URL appended to the text in parentheses
  • Formatting tags like or will be stripped
  • Formatting inside
     or <plaintext> elements will be honored
  • Code-like tags like <script> or <style> will be stripped
  • HTML can also be converted to a Markdown approximation instead. In Markdown mode:

    • Headings are prefixed with # characters
    • Formatting tags like , , , and are converted to Markdown markers
    • tags become Markdown links and tags become Markdown images
    • content is prefixed with "> "
    •  blocks become fenced code blocks
      
    • Data tables are formatted as Markdown tables with a header separator row

    Usage

    require 'html_to_plain_text'
    
    html = "<h1>Hello</h1><p>world!</p>"
    HtmlToPlainText.plain_text(html) # => "Hello\n\nworld!"
    
    HtmlToPlainText.markdown(html) # => "# Hello\n\nworld!"
    # equivalent to HtmlToPlainText.plain_text(html, markdown: true)

    Options

    • show_links (default true) - Include link URLs and image sources in the output.
    • markdown (default false) - Format the output as Markdown instead of plain text.
    • all_tables (default false) - Format all tables as data tables. By default only tables with a non-zero border attribute or a thead or tbody element are formatted as data tables; other tables are assumed to be used for layout only and their cells are separated with spaces instead of "|" delimiters.
    • ignore_nav (default false) - Suppress non-content elements from the output. When set, header, footer, and nav tags are omitted along with any elements that have a role attribute of navigation, banner, or contentinfo.
    • selector (default nil) - A CSS selector limiting the output to matching elements. Only the contents of elements matching the selector are included in the output (e.g. selector: "#main, article"). Only elements within the body of the document are matched. An ArgumentError is raised if the selector is not a valid CSS selector.

    Installation

    Add this line to your application's Gemfile:

    gem "html_to_plain_text"

    And then execute:

    $ bundle install

    Or install it yourself as:

    $ gem install html_to_plain_text

    Contributing

    Open a pull request on GitHub.

    Please use the standardrb syntax and lint your code with standardrb --fix before submitting.

    License

    The gem is available as open source under the terms of the MIT License.