facebook c # sdk: Добавить / редактировать событие с символами новой строки в описании - PullRequest
1 голос
/ 24 марта 2011

Я пытаюсь редактировать события на страницах Facebook. SDK работает нормально, но у меня есть одна проблема.

Всякий раз, когда в описании появляются новые строки (\ r \ n), они публикуются на Facebook. Поэтому я получаю тела событий, такие как:

Новое событие! \ R \ nДобро пожаловать на событие.

вместо

Новое событие!
Добро пожаловать на мероприятие.

глядя на результат графика, попадающего на событие, я вижу, что символы новой строки дважды экранированы и выглядят так:

...
"name": "TEST EVENT",
"description": "Новое событие! \\ r \\ nДобро пожаловать в событие.",
"start_time": "2011-03-24T00: 00: 00"
...

Я перепробовал все возможные решения, но безрезультатно. Я был сокращен до замены новых строк на "*" только для разделения предложений ...

Текст приходит в виде строки в объекте и передается в JsonObject.

JsonObject owner = new JsonObject { .... };
JsonObject evt = new JsonObject();
evt.Add("id", eventId);
evt.Add("owner", owner);
evt.Add("name", eventItem.Name);
evt.Add("updated_time", eventItem.Updated.ToString("o"));
evt.Add("description", eventItem.Description);
evt.Add("start_time", eventItem.StartDate.ToString("o"));
evt.Add("end_time", eventItem.EndDate.ToString("o"));
...
var fbc = new FacebookClient(internalObject.AccessToken);
result = (bool) fbc.Post(evt);

Есть идеи?

EDIT:

Обход. Я внес изменения в FacebookUtils.ToJsonQueryString. Это работает, но я думаю, что это может быть ошибка в SDK?

Похоже, Facebook не поддерживает стандартное экранирование Json от новых строк в событии?

internal static string ToJsonQueryString(IDictionary<string, object> dictionary)
{
   ...

   jsonValue = jsonValue.Replace("\\n", "\n").Replace("\\r", "\r");

   if (!String.IsNullOrEmpty(jsonValue))
   {
      var encodedValue = UrlEncode(jsonValue);
      sb.AppendFormat(CultureInfo.InvariantCulture, "{0}={1}", key, encodedValue);

   ...
   return sb.ToString();
}

Это изменение делает \ r \ n в возвращенной строке запроса похожим на% 0d% 0a вместо% 5cr% 5cn, что и принимает Facebook.

Роянская

Ответы [ 3 ]

1 голос
/ 28 марта 2011

Исправлено с версии SDK 5.0.8 - 25. март

0 голосов
/ 04 мая 2011

Это работает:

Используйте это: <center></center>

Вместо br или новой строки и т. Д. Вы можете делать только один подряд (т.е. вы не можете увеличитьинтервал).

0 голосов
/ 24 марта 2011

Есть ли причина, по которой вы не будете использовать:

{
    "name": "TEST EVENT",
    "description": "New event!<br/>Welcome to the event.",
    "start_time": "2011-03-24T00:00:00"
} 

jsonlint проверяет его ...

...