根据手册,在PHP 7.3中添加了以下常量:
MB_CASE_FOLDMB_CASE_LOWER_SIMPLEMB_CASE_UPPER_SIMPLEMB_CASE_TITLE_SIMPLEMB_CASE_FOLD_SIMPLE我找到了一个做什么的例子MB_CASE_FOLD:
echo mb_convert_case('?', MB_CASE_FOLD, 'UTF-8'); // ss
Run Code Online (Sandbox Code Playgroud)
但是,我找不到任何有关MB_CASE_*_SIMPLE常量的引用。
乍一看,使用简单的latin1字符,MB_CASE_LOWER_SIMPLE其行为就像MB_CASE_LOWER。
什么的MB_CASE_*_SIMPLE从他们做不同MB_CASE_*的同行?
我们可以在https://github.com/php/php-src/blob/master/ext/mbstring/php_unicode.c#L223找到相应的 C 实现
并查看 git commit 消息:
实现了完整的大小写折叠,但不区分大小写的 mb_* 操作继续使用简单的大小写折叠。原因是 haystack 字符串的全大小写折叠可能会改变匹配发生的位置。这必须映射回原始字符串中的位置。
mb_convert_case() 公开完整和简单的案例映射/折叠,其中 full 是默认值。常数是:
- MB_CASE_LOWER(由 mb_strtolower 使用)
- MB_CASE_UPPER(由 mb_strtolower 使用)
- MB_CASE_TITLE
- MB_CASE_FOLD
- MB_CASE_LOWER_SIMPLE
- MB_CASE_UPPER_SIMPLE
- MB_CASE_TITLE_SIMPLE
- MB_CASE_FOLD_SIMPLE(由不区分大小写的操作使用)
所以那些带_SIMPLE后缀的常量用于 Unicode 的Simple Case Folding,没有后缀的常量用于Full Case Folding。
而且,回答VS简单的例子折叠的完整案例折叠的差异。
以下是一些重要的示例:
\n\nMB_CASE_UPPER_SIMPLE:
mb_convert_encoding("\xc3\x9f", MB_CASE_UPPER_SIMPLE); // "\xc3\x9f"\nmb_convert_encoding("\xc3\x9f", MB_CASE_UPPER); // "SS"\nRun Code Online (Sandbox Code Playgroud)\n\nMB_CASE_LOWER_SIMPLE:
mb_convert_encoding("\xc4\xb0", MB_CASE_LOWER_SIMPLE); // "i"\nmb_convert_encoding("\xc4\xb0", MB_CASE_LOWER); // "i\\xcc\\x87"\nRun Code Online (Sandbox Code Playgroud)\n\nMB_CASE_TITLE_SIMPLE与 相似 以MB_CASE_UPPER_SIMPLE同样的方式MB_CASE_UPPER与 相似MB_CASE_TITLE。
| 归档时间: |
|
| 查看次数: |
48 次 |
| 最近记录: |