I came across this answer, that suggests, other than checking if the string is empty, we are probably better off not validating at all. Considering the scope of possible characters when dealing with international names, this seems reasonable.
Should we be foregoing validation altogether?
Are prepared statements sufficient when it comes to sanitizing international names?
$pdo = $connection->prepare("INSERT INTO clicks (domain, sid) VALUES (:domain, :sid)");
$pdo->execute(array(
":domain" => $domain,
":sid" => $sid
));
Another approach would be to disallow certain characters, instead of trying to match included characters. This would get tricky too, however.