diff --git a/boards/models/post.py b/boards/models/post.py --- a/boards/models/post.py +++ b/boards/models/post.py @@ -3,6 +3,8 @@ from datetime import time as dtime import logging import re +from urllib.parse import unquote + from adjacent import Client from django.core.urlresolvers import reverse from django.db import models, transaction @@ -40,6 +42,7 @@ NO_IP = '0.0.0.0' UNKNOWN_UA = '' REGEX_REPLY = re.compile(r'\[post\](\d+)\[/post\]') +REGEX_URL = re.compile(r'https?\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?') PARAMETER_TRUNCATED = 'truncated' PARAMETER_TAG = 'tag' @@ -174,7 +177,7 @@ class PostManager(models.Manager): return ppd - def _preparse_text(self, text): + def _preparse_text(self, text: str) -> str: """ Preparses text to change patterns like '>>' to a proper bbcode tags. @@ -183,6 +186,9 @@ class PostManager(models.Manager): for key, value in PREPARSE_PATTERNS.items(): text = re.sub(key, value, text, flags=re.MULTILINE) + for link in REGEX_URL.findall(text): + text = text.replace(link, unquote(link)) + return text