|
 |
|
SQL Server Tips by Burleson |
XP_HTMLENCODE2
XP_HTMLENCODE loops through every character from the input string
and stores the output in a buffer. XP_HTMLENCODE2 uses another
approach, which is to use the EscapeXML from the ATL Server library.
The result is that the code is much simpler to maintain and also
handles Unicode in addition to ASCII input.
The input data is read and converted to a Unicode string using the
XP++ framework:
wchar_t* pwszInputBuffer =
XP_UNICODETEXT(m_pParameterData[HTMLENCODE2_INPUT_PARAMETER_INDEX].m_Data);
Then simply calling the ATL function does the conversion:
int nEscapedLen = ATL::EscapeXML(pwszInputBuffer, nInputLen,
pwszOutputBuffer, nOutputSize, ATL_ESC_FLAG_ATTR);
pwszOutputBuffer[nEscapedLen] = L'\0';
Finally the data is returned in the output parameter:
if ((m_pParameterData[HTMLENCODE2_OUTPUT_PARAMETER_INDEX].m_bType ==
SRVNVARCHAR) ||
(m_pParameterData[HTMLENCODE2_OUTPUT_PARAMETER_INDEX].m_bType ==
SRVNTEXT))
{
ParamSetOutput(HTMLENCODE2_OUTPUT_PARAMETER_INDEX + 1, (unsigned
char *)pwszOutputBuffer, nEscapedLen*sizeof(wchar_t), FALSE);
}
else
{
char* pszOutput = W2A(pwszOutputBuffer);
int nOutputLength = (int) strlen(pszOutput);
ParamSetOutput(HTMLENCODE2_OUTPUT_PARAMETER_INDEX + 1, (unsigned
char *)pszOutput, nOutputLength, FALSE);
}
The above book excerpt is from:
Super SQL
Server Systems
Turbocharge Database Performance with C++ External Procedures
ISBN:
0-9761573-2-2
Joseph Gama, P. J. Naughter
http://www.rampant-books.com/book_2005_2_sql_server_external_procedures.htm |