Me encanta encontrar soluciones limpias para problemas de texto, y el tema de los guiones es uno de esos detalles que cambia mucho la apariencia.
En términos sencillos, strreplace es una función de bajo nivel muy eficiente porque está implementada en C dentro de PHP: realiza búsquedas y sustituciones de cadenas de manera binaria y evita la sobrecarga de expresiones regulares. Para la localización de guiones esto significa que, si preparas correctamente las secuencias que quieres cambiar (por ejemplo,
el guion normal U+002D, el guion corto U+2013, el guion largo U+2014, el guion blando U+00AD o el guion sin separación U+2011), strreplace puede iterar y sustituir esas secuencias de forma muy rápida.
En la práctica yo optimizo así: primero normalizo el texto a una forma Unicode coherente (NFC) para evitar diferencias de codificación; después creo un mapa de búsqueda con todas las variantes de guiones y su sustituto deseado; y finalmente llamo a strreplace con arrays (needle y replacement) para hacer las transformaciones en pocos pasos. Si son solo cambios de un carácter por otro, uso strtr cuando quiero máxima velocidad y evitar
efectos colaterales de reemplazos encadenados, porque strreplace aplica las sustituciones en orden y eso a veces produce cascadas indeseadas. También tengo cuidado con el guion blando (U+00AD), que no siempre debe eliminarse porque controla la división silábica, y con el guion sin separación (U+2011), que evita saltos de línea: esas decisiones dependen de la localización y la
tipografía. Al final, con una normalización previa y un mapa bien pensado, strreplace resulta una herramienta muy rápida y fiable para unificar guiones en textos localizados, y eso mejora mucho la presentación.