Alir3z4 / Alir3z4/html2text

Too much escaping breaks URLs containing parentheses

オープン
#322 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Python
スター
2.2k
フォーク
296
PR マージ指標
30日以内にマージされた PR はありません

説明

- Use case: output from `html2text`is emailed
- Issue: URLs containing parentheses, brackets or other "markdown escapables" no longer link to the original resource due to insertion of backslashes

Steps to reproduce:

1. Start with an html `a` tag with an `href` containing a parenthesis, e.g. to https://www.sample.com/?url-with-(parenthesized-text)-)-[and-brackets]
2. Pass it through `html2text` (see code below)
3. Email the resulting string to yourself, which in our example will be: `[](https://www.sample.com/?url-with-\(parenthesized-text\)-\)\[and-brackets\])`
4. Open the email in a modern system (Gmail in my case)
5. The clickable URL in the email; it will now point to a different resource than the original one, in our example (https://www.sample.com/?url-with-\(parenthesized-text\)-\)\[and-brackets\] (notice the extra backslashes)

Potential solutions:

1. In `__init__.py`, modify line 459 from `self.o("]({url}{title})".format(url=escape_md(url), title=title))` to`self.o("]({url}{title})".format(url=url, title=title))`; I don't know Markdown specs well enough but after trying a few markdown readers, the lack of escaping inside a URL doesn't seem to break anything -- even with the stray extra ")"
2. Add a switch to suppress Markdown escaping in URLs (new use case, slower code)
3. Others?

Any tips/feedback?

---

Code:
```python
import html2text
import sys

print(f'{sys.version=}')
print(f'{html2text.__version__=}\n')

html = ('\n\n\n\n'
'\n'
'')
parser = html2text.HTML2Text()
parser.body_width = 0
print(parser.handle(html))
```
```
sys.version='3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)]'
html2text.__version__=(2020, 1, 16)

[](https://www.sample.com/?url-with-\(parenthesized-text\)-\)-\[and-brackets\])`

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。