php - 是否存在将 Unicode 文本大写的可靠方法?

标签 php string algorithm methods unicode

我最近不得不处理一些使用 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/

相关文章:

PHP MySQL 计数 IF Google 图表并从列/行中提取数据

php - fGetCsv 只读第一行?

php - 检查 PHP 数组是否为空的最佳方法

c - 关于在 C 中终止字符串的问题

java - Java实践中修改字符串

c - 文本文件每一行上特定符号的出现频率

algorithm - 有多少种方法可以构造一个大小为 N 的数组,使得任意一对连续元素的乘积不大于 M?

algorithm - 深入了解逻辑层次结构

javascript - 无法调用php函数

C++ Pseudo-RSA 快速求解大量的 d(解密 key )