diff --git a/src/client/app/common/views/components/url-preview.vue b/src/client/app/common/views/components/url-preview.vue
index c2dc07b411..3bae6e5078 100644
--- a/src/client/app/common/views/components/url-preview.vue
+++ b/src/client/app/common/views/components/url-preview.vue
@@ -45,7 +45,7 @@ export default Vue.extend({
 		} else if (url.hostname == 'youtu.be') {
 			this.youtubeId = url.pathname;
 		} else {
-			fetch('/url?url=' + this.url).then(res => {
+			fetch('/url?url=' + encodeURIComponent(this.url)).then(res => {
 				res.json().then(info => {
 					this.title = info.title;
 					this.description = info.description;
diff --git a/src/server/web/url-preview.ts b/src/server/web/url-preview.ts
index 8a5e934b1d..041c475a45 100644
--- a/src/server/web/url-preview.ts
+++ b/src/server/web/url-preview.ts
@@ -16,6 +16,6 @@ function wrap(url: string): string {
 	return url != null
 		? url.startsWith('https://')
 			? url
-			: `https://images.weserv.nl/?url=${url.replace(/^http:\/\//, '')}`
+			: `https://images.weserv.nl/?url=${encodeURIComponent(url.replace(/^http:\/\//, ''))}`
 		: null;
 }