PHP 中姓氏的正确大写

Emp*_*ger 3 php regex capitalization

\n

可能的重复:
\n 编程中人名的大写

\n
\n\n\n\n

我注意到在我的网站上注册的人非常懒,他们甚至懒得将自己的名字大写。

\n\n

我的网站是一个商业网站,因此这里没有“自我表达自由”的说法。

\n\n

名字大写非常简单,因为我想不出西方名字不以大写字母开头的例子。我可能是错的。

\n\n

但是将姓氏大写变得更加困难,例如

\n\n
O\'Brien\nO\xc2\xb4Flaherty\nde Wit\nMcKenzie\nAuditore da Firenze\nde los Remedios de Escalada\nVirta-Jokela\n
Run Code Online (Sandbox Code Playgroud)\n\n

有什么好的解决方案可以在 PHP 中正确自动自动大写姓氏,并且在大约 95% 的时间内正确?我知道这一点

\n

Jon*_*Jon 5

这是一个快速但肮脏的解决方案:

  1. 将字符串拆分为由空格和破折号分隔的单词
  2. 对于每个单词:
    • 如果它位于固定的停用词列表(“de”、“los”等)内,请勿修改。
    • 如果没有,请检查它是否在固定列表中具有前缀(该列表将包含“O'”、“Mc”等内容)。如果存在这样的前缀,则将其标准化(例如翻译O"O')并考虑不带前缀的单词进入下一步。
    • 单词的第一个字母大写。