Search code examples
phpregexpreg-replacepreg-matchspecial-characters

Preg replace with accent letters


I am trying to insert a break after a name in a string. But, the name can have characters like é

$string = 'Test string';
$name = 'Tést';

$replacement = '$0<br />$1';
return preg_replace("/^$name/i", $replacement, $string);

I would like this to return:

Test<br /> string

Tést could also be something like: Héllo, byé or nùl This should be possible right?

Thanks in advance


Solution

  • I use something like this to collate accents:

    $collate = [
        "À-Æ" => "A", "à-æ" => "a", "Ç"   => "C", "ç"   => "c",
        "È-Ë" => "E", "è-ë" => "e", "Ì-Ï" => "I", "ì-ï" => "i",
        "Ñ"   => "N", "ñ"   => "n", "Ò-Ø" => "O", "ò-ø" => "o",
        "ß"   => "s", "Ù-Ü" => "U", "ù-ü" => "u", "Ý"   => "Y", "ý" => "y"
    ];
    
    $string = "Test string";
    $name = "Tést";
    
    foreach($collate as $from => $to) {
        $name = preg_replace("/[".$from."]/", $to, $name);
    }
    // echo $name; => "Test"
    
    return preg_replace("/^".$name."/", "$0<br />", $string);
    // result: "Test<br /> string"