[PHP-DEV][DISCUSSION] grapheme_* functions adds locale in parameter (or any?)

Hi, Internals

I would like adds locale parameter that already there are grapheme_* functions.
Because Unicode is locale-dependency but grapheme_* functions is not
locale-dependency.

For example, Add $locale parameter is below.

grapheme_extract(
    string $haystack,
    int $size,
    int $type = GRAPHEME_EXTR_COUNT,
    int $offset = 0,
    int &$next = null,
    string ?$locale = null
): string|false
grapheme_str_split(string $string, int $length = 1, string ?$locale =
null): array|false
grapheme_stripos(string $haystack, string $needle, int $offset = 0,
string ?$locale = null): int|false
grapheme_stristr(string $haystack, string $needle, bool $beforeNeedle
= false, string ?$locale = null): string|false
grapheme_strlen(string $string, ?string $locale = null): int|false|null
grapheme_strpos(string $haystack, string $needle, int $offset = 0,
string ?$locale = null): int|false
grapheme_strripos(string $haystack, string $needle, int $offset = 0,
string ?$locale = null): int|false
grapheme_strrpos(string $haystack, string $needle, int $offset = 0,
string ?$locale = null): int|false
grapheme_strstr(string $haystack, string $needle, bool $beforeNeedle =
false, ?$locale = null): string|false
grapheme_substr(string $string, int $offset, ?int $length = null,
?string ?$locale = null): string|false

What do you think?
I would like go to write an RFC if this is fine.

Regards
Yuya

--
---------------------------
Yuya Hamada (tekimen)
- https://tekitoh-memdhoi.info
- youkidearitai (tekimen) · GitHub
-----------------------------

Le 5 juin 2025 à 03:04, youkidearitai <youkidearitai@gmail.com> a écrit :

Hi, Internals

I would like adds locale parameter that already there are grapheme_* functions.
Because Unicode is locale-dependency but grapheme_* functions is not
locale-dependency.

For example, Add $locale parameter is below.

grapheme_extract(
   string $haystack,
   int $size,
   int $type = GRAPHEME_EXTR_COUNT,
   int $offset = 0,
   int &$next = null,
   string ?$locale = null
): string|false
grapheme_str_split(string $string, int $length = 1, string ?$locale =
null): array|false
grapheme_stripos(string $haystack, string $needle, int $offset = 0,
string ?$locale = null): int|false
grapheme_stristr(string $haystack, string $needle, bool $beforeNeedle
= false, string ?$locale = null): string|false
grapheme_strlen(string $string, ?string $locale = null): int|false|null
grapheme_strpos(string $haystack, string $needle, int $offset = 0,
string ?$locale = null): int|false
grapheme_strripos(string $haystack, string $needle, int $offset = 0,
string ?$locale = null): int|false
grapheme_strrpos(string $haystack, string $needle, int $offset = 0,
string ?$locale = null): int|false
grapheme_strstr(string $haystack, string $needle, bool $beforeNeedle =
false, ?$locale = null): string|false
grapheme_substr(string $string, int $offset, ?int $length = null,
?string ?$locale = null): string|false

What do you think?
I would like go to write an RFC if this is fine.

Regards
Yuya

Hi,

A $locale parameter could be added for functions that are locale-dependant: grapheme_stripos() ,grapheme_stristr(), grapheme_strripos(), and more generally to any function that deals with casing.

It doesn’t make sense for the other functions.

—Claude

2025年6月5日(木) 18:02 Claude Pache <claude.pache@gmail.com>:

> Le 5 juin 2025 à 03:04, youkidearitai <youkidearitai@gmail.com> a écrit :
>
> Hi, Internals
>
> I would like adds locale parameter that already there are grapheme_* functions.
> Because Unicode is locale-dependency but grapheme_* functions is not
> locale-dependency.
>
> For example, Add $locale parameter is below.
> ```
> grapheme_extract(
> string $haystack,
> int $size,
> int $type = GRAPHEME_EXTR_COUNT,
> int $offset = 0,
> int &$next = null,
> string ?$locale = null
> ): string|false
> grapheme_str_split(string $string, int $length = 1, string ?$locale =
> null): array|false
> grapheme_stripos(string $haystack, string $needle, int $offset = 0,
> string ?$locale = null): int|false
> grapheme_stristr(string $haystack, string $needle, bool $beforeNeedle
> = false, string ?$locale = null): string|false
> grapheme_strlen(string $string, ?string $locale = null): int|false|null
> grapheme_strpos(string $haystack, string $needle, int $offset = 0,
> string ?$locale = null): int|false
> grapheme_strripos(string $haystack, string $needle, int $offset = 0,
> string ?$locale = null): int|false
> grapheme_strrpos(string $haystack, string $needle, int $offset = 0,
> string ?$locale = null): int|false
> grapheme_strstr(string $haystack, string $needle, bool $beforeNeedle =
> false, ?$locale = null): string|false
> grapheme_substr(string $string, int $offset, ?int $length = null,
> ?string ?$locale = null): string|false
> ```
>
> What do you think?
> I would like go to write an RFC if this is fine.
>
> Regards
> Yuya
>

Hi,

A $locale parameter could be added for functions that are locale-dependant: grapheme_stripos() ,grapheme_stristr(), grapheme_strripos(), and more generally to any function that deals with casing.

It doesn’t make sense for the other functions.

—Claude

Hi, Claude and Internals

Thank you for your feedback.
Indeed, I keep only locale is case-sensitive.

However, I watched that RFC: PHP: rfc:strtolower-ascii
and Use ASCII lower case for misc case folding by tstarling · Pull Request #7511 · php/php-src · GitHub,
Perhaps, I should not locale-dependant for grapheme functions.

I'll think about it more deeply.
Please give me a time.

Regards
Yuya

--
---------------------------
Yuya Hamada (tekimen)
- https://tekitoh-memdhoi.info
- youkidearitai (tekimen) · GitHub
-----------------------------

However, I watched that RFC: PHP: rfc:strtolower-ascii
and Use ASCII lower case for misc case folding by tstarling · Pull Request #7511 · php/php-src · GitHub,
Perhaps, I should not locale-dependant for grapheme functions.

Note that this RFC was about making the functions independent from the global mode as set by `setlocale()`.

There is no issue in adding an explicit $locale parameter to those functions if the default value doesn’t depend on a global state.

—Claude

Note that this RFC was about making the functions independent from the global mode as set by `setlocale()`.

There is no issue in adding an explicit $locale parameter to those functions if the default value doesn’t depend on a global state.

—Claude

Hi, Claude
Thanks for the comment.

I see, I will try add $locale parameter to the minimum.
Just a moment, please.

Regards
Yuya

--
---------------------------
Yuya Hamada (tekimen)
- https://tekitoh-memdhoi.info
- youkidearitai (tekimen) · GitHub
-----------------------------

Hi, Internals
I created an RFC and Draft PR.

- PHP: rfc:grapheme_add_locale_for_case_insensitive
- [RFC] Add a locale for grapheme case-insensitive functions by youkidearitai · Pull Request #18792 · php/php-src · GitHub

I would like to discussion.
Feel free to comment.

Regards
Yuya

--
---------------------------
Yuya Hamada (tekimen)
- https://tekitoh-memdhoi.info
- youkidearitai (tekimen) · GitHub
-----------------------------