Search code examples
phpmbstring

PHP function to adapt texte not working with special characters?


i'm struggling with a function that adapts a text depending of the first letter of a string.

            $str = "élo";

            function deD($str) { 
            return (in_array(mb_strtolower($str[0]), array('a', 'e', 'é', 'è', 'ê', 'h', 'i', 'o', 'u')) ? 'd\'' : 'de ').$str;
            }
            
            echo deD($str).'</br>';
            echo $str[0];

OUTPUT: de élo �

EXPECTED OUTPUT: d'élo é

Basically, mb_strtolower should prevent all special characters to be miss-read. I tried different options, but i still get it wrong. I'd like the function to work with all accent types.

Any idea ?

Thanks a lot from France !


Solution

  • You need to set utf-8 encoding for the file. Try to put this at the top:

    header('Content-type: text/html; charset=utf-8');
    

    Then, instead of $str[0], use mb_substr($str, 0, 1)

    function deD($str) {
        return (in_array(mb_strtolower(mb_substr($str, 0, 1)), array('a', 'e', 'é', 'è', 'ê', 'h', 'i', 'o', 'u')) ? 'd\'' : 'de ').$str;
    }
    
    $str = 'élo';
    
    echo deD($str).'<br>';
    echo mb_substr($str, 0, 1);