我最近不得不处理一些使用 Unicode 字符串的复杂问题(使用 PHP,一种我非常熟悉的语言)。 mbstring
扩展并没有真正正常工作,我们在尝试将 Unicode 字母大写时遇到了巨大的痛苦,这对于 ASCII 文本来说是一个微不足道的问题,已经以多种方式解决了。
如果我必须用 ASCII 文本来解决这个问题,我可能只需要字符,检查它是否是一个字母,然后从它的 ASCII 值中减去 32,例如!但就目前而言,我找不到任何解释 Unicode 文本大写问题是如何解决的:我是否需要存储一个完整的关联表来将每个小写字符映射到其相关的大写版本?我想(并希望)我会听到一个巨大的NO
!
问题的核心:在使用 Unicode 字符操作时,是否存在将小写字母正确转换为大写字母(以及转换回大写字母)的方法?如果是这种情况,应用了哪些策略?
对于此测试,假设您没有任何模块,但实际上有任何模块可用:没有 mbstring
,没有 iconv
,什么都没有。此外,为了简单起见,假设已经解决了识别单个字符的问题,我们的 String
对象有一个 nextChar()
方法,可用于查找下一个字符,与其字节长度无关。假设您想要获取一个字符串,使用 nextChar()
对其进行迭代,并尽可能将每个字符大写。
如果不清楚或需要更多信息,只需发表评论,我会尽力回答您的疑问,如果它们现在比我的还大的话;)
最佳答案
您可以试试 PortableUTF8 库,它是作为 mbstring 和 iconv 的替代品编写的。
http://pageconfig.com/post/portable-utf8
另一个有趣的库是 Stringy。它默认与 mbstring 一起工作,但如果未找到模块,它将使用 polyfill 包。
https://github.com/danielstjules/Stringy
为了加深对问题的了解,阅读以下内容很有趣:
What factors make PHP Unicode-incompatible?
希望对你有用。
关于php - 是否存在将 Unicode 文本大写的可靠方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38106977/