Ignore emojis while URL encoding S3 result URL

This commit is contained in:
Jaex 2019-09-01 17:26:58 +03:00
parent ec610f32e0
commit 809283318f
3 changed files with 40 additions and 1 deletions

View file

@ -31,6 +31,21 @@ namespace ShareX.HelpersLib
{
public static class Emoji
{
public static int SearchEmoji(string text)
{
int emojiLength = 0;
foreach (string emoji in Emojis)
{
if (text.StartsWith(emoji, StringComparison.Ordinal))
{
emojiLength = Math.Max(emojiLength, emoji.Length);
}
}
return emojiLength;
}
public static void SaveEmojiList(string filePath)
{
File.WriteAllText(filePath, string.Join(Environment.NewLine, Emojis), Encoding.UTF8);

View file

@ -115,6 +115,30 @@ public static string URLEncode(string text, bool isPath = false)
return sb.ToString();
}
public static string URLEncodeIgnoreEmoji(string text, bool isPath = false)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < text.Length; i++)
{
string remainingText = text.Substring(i);
int emojiLength = Emoji.SearchEmoji(remainingText);
if (emojiLength > 0)
{
sb.Append(remainingText.Substring(0, emojiLength));
i += emojiLength - 1;
}
else
{
sb.Append(URLEncode(remainingText.Substring(0, 1), isPath));
}
}
return sb.ToString();
}
public static string RemoveBidiControlCharacters(string text)
{
return new string(text.Where(c => !BidiControlCharacters.Contains(c)).ToArray());

View file

@ -263,7 +263,7 @@ public string GenerateURL(string uploadPath)
{
if (!string.IsNullOrEmpty(Settings.Endpoint) && !string.IsNullOrEmpty(Settings.Bucket))
{
uploadPath = URLHelpers.URLEncode(uploadPath, true);
uploadPath = URLHelpers.URLEncodeIgnoreEmoji(uploadPath, true);
string url;