PHP RFC: Grapheme Mask
* Version: 1.0 * Date: 2026-06-25 * Author: Sepehr, sepehrphpr@gmail.com * Status: Draft * First Published at: http://wiki.php.net/rfc/grapheme_mask * Implementation: TBD * Discussion thread: https://news-web.php.net/php.internals/
Introduction
This RFC proposes a new function grapheme_mask() to the Intl extension. This function allows masking a string with a specific character while being “Unicode-aware” by respecting grapheme cluster boundaries.
Proposal
Add the following function:
function grapheme_mask(string $string, string $mask_char = "*", int $start = 0, ?int $length = null): string|false {}
The function will correctly identify individual graphemes (like emojis or combined characters) and replace them with the $mask_char, ensuring the visual integrity of the string is maintained.
Examples
// Traditional str_repeat/masking might break emojis echo grapheme_mask("سلام 👋", "#"); // Output: ##### (Correctly identifies 5 graphemes)
Proposed PHP Version(s)
PHP 8.4 or 8.5 (Next minor version).
Proposed Changes
The implementation will be part of the ext/intl extension, utilizing the ICU library's break iterator.
Vote
TBD