preg_replace und Akzente
Nico
- php
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
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);
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