Nico: preg_replace und Akzente

Hallo ihr da draußen,

folgendes Problem. Gegeben sei folgender String:

$string = 'Das Gefangenenlager von Guantánamo ist noch nicht geschlossen.';

Das Wort Guantánamo soll hervorgehoben und der ganze String ausgeworfen werden. Also z.B. so:

echo preg_replace('/(Guantánamo)/', '<b>\1</b>', $string);

Dies soll aber unabhängig von der Schreibung geschehen. Also auch bei Kleinschreibung, was ja kein Problem ist:

echo preg_replace('/(guantánamo)/i', '<b>\1</b>', $string);

Kennt jemand eine Möglichkeit preg_replace() aufzufordern, auch den Akzent zu ignorieren, sodass folgendes auch zu einer Hervorhebung führt?

echo preg_replace('/(guantanamo)/i', '<b>\1</b>', $string1);

Vielen Dank für die Hilfe

Nico

  1. Das geht nur mit einer Liste von Ersatzzeichen, die deiner Meinung nach äquivalent zu diesem Buchstaben sind.

    echo preg_replace('/(Guant[aá]namo)/i', '<b>\1</b>', $string);

    Das kann man auch automatisch generieren lassen.

    $wort = 'Guantánamo';
    $regex = '/(' . preg_quote($wort, '/') . ')/i'
    $regex = strtr($regex, array(
        'á' => '[aá]',
        'é' => '[eé]'));
    echo preg_replace($regex, '<b>\1</b>', $string);

    1. Vielen Dank, gute Idee!

      Ich habe das jetzt so gemacht:
      $string = preg_replace('/a/i', '[aá]', $string);

      Das Problem ist, dass MySQL a und á für äquivalent hält (wenn man BINARY nicht in die SQL-Query einbezieht), preg_replace aber nicht.

      Grüße

      Nico