۱۳۸۷/۱۲/۰۶

Postable


ارسال سورس كد برنامه‌ها در بلاگر داستان خودش را دارد كه پيشتر در مورد آن بحث شد.
اما اين‌كار (تبديل كاراكترهاي غيرمجاز به نمونه‌هاي مجاز يا به اصطلاح escape آن‌ها) پس از يك مدت تبديل به دردسر خواهد شد. به همين جهت برنامه‌ي كوچك زير را براي ساده‌تر كردن اين وضع تهيه كرده‌ام، كه از آدرس زير قابل دريافت است:



دريافت برنامه (براي اجرا نياز به دات نت فريم ورك 2 دارد)

اين برنامه‌ي كمكي، انجام چند كار زير را در بلاگر براي شما ساده‌تر خواهد كرد:
الف) escape خودكار كاراكترهاي غيرمجاز xml هنگام ارسال سورس كدهاي خود و همچنين قرار دادن آن‌ها داخل تگ‌هاي div و pre مناسب.

روش برنامه نويسي آن:

public static string EscapeXml(string s)
{
var xml = s;
if (!string.IsNullOrEmpty(xml))
{
// replace literal values with entities
xml = xml.Replace("&", "&");
xml = xml.Replace("<", "&lt;");
xml = xml.Replace(">", "&gt;");
xml = xml.Replace("\"", "&quot;");
xml = xml.Replace("'", "&apos;");
}
return xml;
}
ب) حذف خطوط بين تگ‌هاي html . اين مورد هنگام ارسال يك table استاندارد html در بلاگر لازم است. براي مثال در بلاگر ارسال كد زير
<table>
<tr>
<td>data
</td>
</tr>
سبب ايجاد فواصل عجيبي در حين نمايش رديف‌هاي جدول در سايت خواهد شد، زيرا بلاگر به ازاي هر خط جديد يك br را به صورت خودكار نمايش خواهد داد. براي رفع اين مشكل از دكمه remove html new lines استفاده كنيد. به اين صورت اطلاعات فوق به صورت خودكار به شكل زير تبديل مي‌شوند:

<table> <tr> <td>data</td> </tr>

روش برنامه نويسي آن :

private static readonly Regex REGEX_BETWEEN_TAGS = new Regex(@">\s+<", RegexOptions.Compiled);
private static readonly Regex REGEX_LINE_BREAKS = new Regex(@"\n\s+", RegexOptions.Compiled);
public static string RemoveSpaces(string html)
{
html = REGEX_BETWEEN_TAGS.Replace(html, "> <");
return REGEX_LINE_BREAKS.Replace(html, string.Empty);

}

ج) حذف كاراكتر 0xA0 . البته اين مورد ارتباطي به بلاگر پيدا نمي‌كند ولي اگر با CPP كار كرده باشيد، حتما به مورد كپي سورس از اينترنت به داخل اديتور و عدم كامپايل آن، برخورده‌ايد. در سورس كدهاي CPP مجاز به استفاده از كاراكتر No-Break Space نيستيد (0xA0) و بايد حذف شود. حال فرض كنيد با بيش از 200 سطر سر و كار داريد. بنابراين نياز به يك تميز كننده سريع وجود خواهد داشت. (اين مورد در اديتور برنامه management studio اس كيوال سرور هم صادق است)

txtMod.Text = txtOrig.Text.Replace((char)160, ' ');
ساده است ولي انجام دستي آن مشكل خواهد بود.