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