Ahhh, ese es bueno Triby
Solo es cuestión de saber como trabajan las codificaciones. Una códificación UTF-8 puede llegar hasta 4 bytes para poder mostrar el caracter. Copio y pego una información de wikipedia para que se pueda entender (bueno algo se puede entender con esto
)
Cita: UTF-8 divide los caracteres Unicode en varios grupos, en función del número de bytes necesarios para codificarlos. El número de bytes depende exclusivamente del código de carácter asignado por Unicode y del número de bytes necesario para representarlo. La distribución de caracteres es la siguiente:
- Caracteres codificados con un byte: Los incluidos en US-ASCII, un total de 128 caracteres.
- Caracteres codificados con dos bytes: Un total de 1920 caracteres. Este grupo incluye los caracteres romances más signos diacríticos, y los alfabetos griego, cirílico, copto, armenio, hebreo, árabe, siríaco y Thaana entre otros.
- Caracteres codificados con tres bytes: Caracteres del plano básico multilingüe de Unicode, que unido al grupo anterior, incluye la práctica totalidad de caracteres de uso común, entre ellos los caracteres del grupo CJK: Chino, japonés y coreano.
- Caracteres codificados con cuatro bytes: Caracteres del plano suplementario multilingüe. Símbolos matemáticos y alfabetos clásicos para uso principalmente académico: Lineal B silábico e ideográfico, alfabeto persa, fenicio... Y el plano suplementario ideográfico: caracteres Han de uso poco común.
Una propiedad importante de la codificación es que los bits más significativos del primer byte de una secuencia multi-byte determinan la longitud de la secuencia. Estos bits más significativos 110 para secuencias de dos bytes; 1110 para secuencias de tres bytes, etc. Estos bits además proporcionan la información de sincronía que permite identificar el inicio de un símbolo.
Conforme a esa información da entender que el caracter que indicaste, en el Unicode se representa con 3 bytes y por eso te muestra el strlen los bytes que corresponde, ya que strlen no verfiica si es un caracter en sí, sino que verifica los bytes. Esto es bueno saberlo, porque si nos encontramos algún día con algún código que tenga este tipo de caracteres y queremos saber su longitud, tendremos resultados muy diferentes a lo que verdaderamente va a haber.
En este caso, se podría usar mb_strlen, ejemplo
Código PHP:
Ver original<?php
$char = 'ọ'; // Si no se ve bien, estamos usando el que corresponde a ọ ;
echo mb_strlen($char, 'UTF-8'); // devuelve 1