使用Google Calendar API(PHP)插入包含非ASCII字符的事件

时间:2013-10-10 13:29:03

标签: php encoding calendar ascii google-calendar-api

我无法使用Google Calendar API(PHP)的v3插入事件。

如果某个事件的描述包含一个字符,例如井号£,则会在日历中创建该事件,但该描述将留空。似乎这对于初始7位字符代码之外的所有字符都是如此(ASCII代码0-127)。

通过使用htmlentities函数,我可以用£

替换井号的所有实例

如果用户使用的是基于网络的Google日历版本,但移动应用不会将其转换回英镑符号,则此功能正常。

这是一个非常大的问题,因为事件通常是使用非ascii引号从Microsoft Word复制/粘贴的。

是否有某种编码方法可以解决这个问题?我目前在MySQL数据库和PHP脚本中使用UTF-8编码。

我正在使用以下代码创建活动:

function buildGoogleEvent($title,$description,$start_time,$end_time,$location) {
    // Create an event object and set some basic event information
    $event = new Google_Event();
    $event->setSummary($title);
    $event->setLocation($location);
    $event->setDescription(htmlentities($description, ENT_NOQUOTES, 'utf-8'));

    // Convert the start and end date/times to ATOM format
    $start_time_atom = str_replace(" ", "T", $start_time);
    $end_time_atom = str_replace(" ", "T", $end_time);

    // Add the event start to the event object
    $start = new Google_EventDateTime();
    $start->setDateTime($start_time_atom);
    $start->setTimeZone('Europe/London');
    $event->setStart($start);

    // Add the event end to the event object
    $end = new Google_EventDateTime();
    $end->setDateTime($end_time_atom);
    $end->setTimeZone('Europe/London');
    $event->setEnd($end);

    return $event;
}

此代码插入事件:

$createdEvent = $service->events->insert($google_calendar_id, $event);

已经坐了很长一段时间,所以任何帮助都表示赞赏!我的PHP版本是5.5.4。

1 个答案:

答案 0 :(得分:1)

事实证明这是一个简单的解决方案。我将HTTP标头设置为使用utf-8字符集,但没有专门编码我的描述。要将我的描述添加到我现在使用的事件中:

$event->setDescription(utf8_encode($description));