Jump to: navigation, search

H2VX is a production deployment of the X2V hCard and hCalendar conversion transforms.

It converts hCard contacts and hCalendar events on web pages to .vcf and .ics respectively for use in desktop and other client software applications.



To convert hCards to vCards, go https://h2vx.com/vcf/ and enter the URL to the hCards.

To convert hCalendar to iCalendar, go https://h2vx.com/ics/ and enter the URL to the hCalendar events.


Links to H2VX.com to convert a URL (like http://microformats.org/wiki/events ) can be constructed as follows:

You may omit the leading "http://" from the URL to be converted for a briefer more readable URL:

download vCards from hCards
e.g. https://h2vx.com/vcf/microformats.org/wiki/events
download iCalendar from hCalendar
e.g. https://h2vx.com/ics/microformats.org/wiki/events
subscribe to hCalendar from hCalendar
e.g. webcal://h2vx.com/ics/microformats.org/wiki/events
https://h2vx.com/ics/sub/URL for systems which don't support auto-linking of webcal: URLs, e.g. MediaWiki, Twitter.
e.g. https://h2vx.com/ics/sub/microformats.org/wiki/events

user agent strings

H2VX uses two user agent strings, when retrieving hCards and hCalendars respectively:

You may see occurrences of these in your web server logs when users of H2VX convert hCards and hCalendar events on your pages.


H2VX is built and maintained by Tantek with:

open source

H2VX is available on the microformats github:

setting up your own H2VX

(in progress)


Some of the open source history behind H2VX can be found with history of X2V. E.g.


Found a problem with H2VX?


  1. Check it with https://dev.h2vx.com/ to see if the dev version fixes it
  2. If not, add it to: https://github.com/microformats/h2vx.com/issues

Want to help?

Please move issues in this list to https://github.com/microformats/h2vx.com/issues, leaving the subheads intact for now with just a permalink to each github issue under each respective heading.

value class pattern empty span fails

<span class="start dtstart">
 <span class="value-title" title="2012-06-02T22:00:00-04:00"></span>
 10:00 pm

empty document from arjw.ifmw.mobi

(needs investigation)

unable to extract hCards on marinersmexico

(needs investigation)

hCard ids not working with referrer

(needs investigation)

hard to find URLs to put on a page

possible problem with iOS6

from: https://twitter.com/equivalentideas/status/275120059788169216

robots.txt prevents subscription in Google Reader

Google Reader won't subscribe to any h2vx hCalendar files due to robots.txt. TomMorris 15:33, 1 June 2011 (UTC)

Google Calendar also fails because of their robots.txt which disallows robots from fetching and therefore caching the ical files. Jayvdb 22:16, 5 May 2012 (UTC)

Apparently, I was correct in thinking Google would likely have a unique user-agent specifically for calendar fetches (see e.g. quote below) but they don't. It's not on the UA list and I tested empirically (`sudo nc -v -l -p 80`) and it is a generic UA. ;( Someone should retest Google Reader to see if it works.

Google has several other user-agents, including Feedfetcher (user-agent Feedfetcher-Google). Since Feedfetcher requests come from explicit action by human users who have added the feeds to their Google home page or to Google Reader], and not from automated crawlers, Feedfetcher does not follow robots.txt guidelines. You can prevent Feedfetcher from crawling your site by configuring your server to serve a 404, 410, or other error status message to user-agent Feedfetcher-Google.More information about Feedfetcher.
<ref>http://support.google.com/webmasters/bin/answer.py?hl=en&answer=182072</ref> --Jeremyb 22:34, 12 June 2012 (UTC)
On second thought, I tested w/ a real webserver (+tcpdump) to see if /robots.txt was fetched with a different agent than the actual feed. no such luck.
From: googlebot(at)googlebot.com
User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
--Jeremyb 22:34, 12 June 2012 (UTC)

Date incorrect when not using abbr element for dtstart

I had a date marked up like so <em class="detail dtstart" title="2010-10-20">Wednesday, October 20, 2010</em>. It was not being parsed correctly until I changed it to use <abbr>, but the element shouldn't really make any difference.

.vcf not formed properly

When opening the resultant .vcf files with Outlook, all non-standard characters are not shown correctly, due to the fact that the returned file is not encoded as UTF-8 without the BOM. Thus, these files are useless for use with Outlook - one of the most used e-mail clients.

Can we get a UTF-8 file returned without the BOM?

Missing data/Wrong encoding

<div class="vcard">
<h2 class="fn org"><img class="photo" src="http://static.freewave.at/logos/testa_rossa_caffe_150.gif" alt="Testa Rossa Caffèbar Logo" />Testa Rossa Caffèbar</h2>
<div class="adr work"><span class="street-address">Mahlerstraße 4 </span><br />
 <span class="postal-code">1010</span> <span class="locality">Wien</span><br />
 <span class="country-name">Österreich</span></div>
<div><span class="tel work">+43 699 161 616 61</span><br />
 <a class="url work" href="http://www.testarossawien.at/">http://www.testarossawien.at/</a><br />
 <a class="email work" href="mailto:"></a></div>
<div class="geo"><span class="latitude">48.20275</span>,<span class="longitude">16.37079</span></div>

Thanks! --Vividvisions 17:25, 4 May 2010 (UTC)

I got the same type of problem with non ASCII content. Don't know which part is responsible, though. --Jean-Luc Geering 2010-05-10

+1, I was coaching the dudes at http://hagreve.com/ implementing hCalendar and they reached the roadblock of having the accented chars wrongly encoded on the .ics They resorted to using other ways of building an ics. :sadface: Thanks. -- andr3

HTML5 support

Please give feedback on the https://dev.h2vx.com/ HTML5 support here:

  • Is there a timeout/throttling on requests to dev.h2vx? I've been getting inconsistent returns on ics and webcal requests from the same markup. Don't know what else could be the issue. When it works, it works great though!
    • Any throttling we've been adding manually as necessary. What URL are you trying? Tantek 18:04, 14 July 2011 (UTC)
  • ...


mouse events

page semantics

not possible to use dtstart with timezone in abbr title

microformats2 support

microformats2 support - when is it coming? from


Resolved issues are moved to this section. If this grows too big we can move it to h2vx-issues-resolved

2019-03-07 HTML5 article support

Fatal error Call-time pass-by-reference

Issue captured on github too: https://github.com/microformats/h2vx.com/issues/2

Hi Tantek

I've also encountered this issue - I'm guessing that someone has upgraded PHP on your server - the pass-by-reference behaviour is deprecated in PHP 5. Would it be possible to refactor these functions to pass by value? We are consuming these services in a public site.

Many thanks


Dipdapdop 08:04, 14 October 2015 (UTC)

Fatal error: Call-time pass-by-reference has been removed in /home/tantek/domains/h2vx.com/public_html/dev/ics/get-cal.php on line 141

The contact conversion service @ http://h2vx.com/vcf/ fails with the error : Fatal error: Call-time pass-by-reference has been removed in /home/tantek/domains/h2vx.com/public_html/vcf/get-contact.php on line 106

Why this error now ? Is it possible to repair it ? This link is very useful Thank you

The error is on line 106, looking at the source-code, 106 is a print statement. It might be useful to turn on error reporting http://php.net/manual/en/function.error-reporting.php to get a better explanation and what line in the code that is on the server is failing. Then we can debug. Like 114 the regular expression smells like it might be the problem. There is an & which would be pass-by-reference. - Brian

It is the line with preg_match_all( '/FN.*?:(.*)/i', $Str, &$matches); in it, both for get-contact and get-cal. - Tantek




Once a resolved issue has no further actions (and ideally is verified by the issue reporter), it can be closed and moved to this section. If this grows too big we can move it to h2vx-issues-closed


Have feedback on H2VX like suggested improvements?

Please file an issue on the GitHub repo!

Previous issues filed here that need to be processed (either done, or copied/moved to GitHub issue for tracking)


There is at least one related H2V service that uses the same X2V XSLT files as H2VX:


Previously Technorati hosted X2V conversion services:

see also

H2VX was last modified: Thursday, March 7th, 2019