Back to articles

Tag archive

#unicode

L
Sep 4, 2026

Lowercasing "İ" Adds a Character: How Turkish Text Broke a Keyword Router

mb_strtolower('İ') does not return 'i'. It returns 'i' plus U+0307 COMBINING DOT ABOVE, so the string gets one code point longer, looks identical on screen, and silently stops matching your keyword. NFC and casefold do not collapse it. Here is what does, plus the unbounded-substring and map-order bugs that were misrouting 35% of a classifier's input.

Sep 4, 20267 min read2 reactions0 comments