FString FGenericPlatformHttp::UrlEncode(const FString &UnencodedString)
{
	FTCHARToUTF8 Converter(*UnencodedString);	//url encoding must be encoded over each utf-8 byte
	const UTF8CHAR* UTF8Data = (UTF8CHAR*) Converter.Get();	//converter uses ANSI instead of UTF8CHAR - not sure why - but other code seems to just do this cast. In this case it really doesn't matter
	FString EncodedString = TEXT("");
	
	TCHAR Buffer[2] = { 0, 0 };

	for (int32 ByteIdx = 0, Length = Converter.Length(); ByteIdx < Length; ++ByteIdx)
	{
		UTF8CHAR ByteToEncode = UTF8Data[ByteIdx];
		
		if (IsAllowedChar(ByteToEncode))
		{
			Buffer[0] = ByteToEncode;
			FString TmpString = Buffer;
			EncodedString += TmpString;
		}
		else if (ByteToEncode != '\0')
		{
			EncodedString += TEXT("%");
			EncodedString += FString::Printf(TEXT("%.2X"), ByteToEncode);
		}
	}
	return EncodedString;
}
Beispiel #2
0
bool EditField::OnKeyboardEvent(bool bKeyDown, unsigned int sym, unsigned int mod)
{
   if (!bKeyDown)
      return true;

   switch (sym)
   {
   case SDLK_LEFT:
      if (m_uiCaretPos > 0)
         m_uiCaretPos--;
      UpdateCaretPos();
      break;

   case SDLK_RIGHT:
      if (m_uiCaretPos < static_cast<unsigned int>(m_cszText.GetLength()))
         m_uiCaretPos++;
      UpdateCaretPos();
      break;

   case SDLK_HOME:
      m_uiCaretPos = 0;
      UpdateCaretPos();
      break;

   case SDLK_END:
      m_uiCaretPos = m_cszText.GetLength();
      UpdateCaretPos();
      break;

   case SDLK_DELETE:
      if (m_uiCaretPos < static_cast<unsigned int>(m_cszText.GetLength()))
      {
         m_cszText.Delete(m_uiCaretPos);
         UpdateTexture();
      }
      break;

   case SDLK_BACKSPACE:
      if (m_uiCaretPos > 0)
      {
         m_cszText.Delete(--m_uiCaretPos);
         UpdateTexture();
      }
      break;

   case SDLK_ESCAPE:
      GetWindowManager().SetFocus();
      m_bFocused = false;
      break;

   default:
      if (IsAllowedChar(sym, mod))
      {
         unsigned int ch = sym;
         if (sym >= SDLK_a && sym <= SDLK_z && (mod & KMOD_SHIFT) != 0)
            ch -= 32; // make uppercase

         m_cszText.Insert(m_uiCaretPos++, static_cast<TCHAR>(ch));
         UpdateTexture();
      }
      break;
   }

   // update text attribute
   SetAttr(EditFieldAttr::Text, m_cszText, true);

   return true;
}