コード例 #1
0
        /// <summary>
        /// Converts a string to an HTML-encoded string
        /// </summary>
        /// <param name="value">The string to encode</param>
        /// <param name="attributeQuotesType">HTML attribute quotes type</param>
        /// <returns>The encoded string</returns>
        public static string HtmlAttributeEncode(string value,
                                                 HtmlAttributeQuotesType attributeQuotesType = HtmlAttributeQuotesType.Double)
        {
            char   quoteCharValue     = '"';
            string quoteCharReference = "&#34;";             // use `&#34;` instead of `&quot;`, because it is shorter

            if (attributeQuotesType == HtmlAttributeQuotesType.Single)
            {
                quoteCharValue     = '\'';
                quoteCharReference = "&#39;";
            }

            if (string.IsNullOrWhiteSpace(value) || !ContainsHtmlAttributeEncodingChars(value, quoteCharValue))
            {
                return(value);
            }

            string        result;
            StringBuilder sb = StringBuilderPool.GetBuilder();

            using (var writer = new StringWriter(sb))
            {
                int charCount = value.Length;

                for (int charIndex = 0; charIndex < charCount; charIndex++)
                {
                    char charValue = value[charIndex];

                    switch (charValue)
                    {
                    case '"':
                    case '\'':
                        if (charValue == quoteCharValue)
                        {
                            writer.Write(quoteCharReference);
                        }
                        else
                        {
                            writer.Write(charValue);
                        }

                        break;

                    case '&':
                        writer.Write("&amp;");
                        break;

                    case '<':
                        writer.Write("&lt;");
                        break;

                    default:
                        writer.Write(charValue);
                        break;
                    }
                }

                writer.Flush();

                result = writer.ToString();
            }

            StringBuilderPool.ReleaseBuilder(sb);

            return(result);
        }
コード例 #2
0
        /// <summary>
        /// Converts a string to an HTML-encoded string
        /// </summary>
        /// <param name="value">The string to encode</param>
        /// <param name="attributeQuotesType">HTML attribute quotes type</param>
        /// <returns>The encoded string</returns>
        public static string HtmlAttributeEncode(string value,
			HtmlAttributeQuotesType attributeQuotesType = HtmlAttributeQuotesType.Double)
        {
            char quoteCharValue = '"';
            string quoteCharReference = "&#34;"; // use `&#34;` instead of `&quot;`, because it is shorter

            if (attributeQuotesType == HtmlAttributeQuotesType.Single)
            {
                quoteCharValue = '\'';
                quoteCharReference = "&#39;";
            }

            if (string.IsNullOrWhiteSpace(value) || !ContainsHtmlAttributeEncodingChars(value, quoteCharValue))
            {
                return value;
            }

            string result;

            using (var writer = new StringWriter())
            {
                int charCount = value.Length;

                for (int charIndex = 0; charIndex < charCount; charIndex++)
                {
                    char charValue = value[charIndex];

                    switch (charValue)
                    {
                        case '"':
                        case '\'':
                            if (charValue == quoteCharValue)
                            {
                                writer.Write(quoteCharReference);
                            }
                            else
                            {
                                writer.Write(charValue);
                            }

                            break;
                        case '&':
                            writer.Write("&amp;");
                            break;
                        case '<':
                            writer.Write("&lt;");
                            break;
                        default:
                            writer.Write(charValue);
                            break;
                    }
                }

                writer.Flush();

                result = writer.ToString();
            }

            return result;
        }