Gehe zu deutscher Webseite

ViaThinkSoft CodeLib

This article is in:
CodeLibProgramming aidsPHP

PHP 5 stellt folgende neue Funktionen zur Verfügung, die die Groß- und Kleinschreibung ignorieren: stripos() und str_ireplace().

Jetzt kann es vorkommen, dass man einen bestimmten Begriff rot markieren möchte, jedoch nicht weiß, ob er im zu bearbeitenden Text groß oder klein geschreiben wurde. Hier kann str_ireplace() zwar weiterhelfen, jedoch wird der ersetzte Text danach nicht seine ursprüngliche Groß-/Kleinschreibung behalten.

Folgende Funktion schafft Abhilfe:

// http://www.php.net/manual/de/function.str-ireplace.php#86099
// Revision 2009-06-22 16:26 MESZ
function ext_str_ireplace($findme, $replacewith, $subject, $magic_sequence = '$1', &$replacements_made = 0)
{
        // Replaces $findme in $subject with $replacewith
        // Ignores the case and do keep the original capitalization by using $1 in $replacewith
        // Required: PHP 5

        $rest = $subject;
        $result = '';

        while (stripos($rest, $findme) !== false) {
                $pos = stripos($rest, $findme);

                // Remove the wanted string from $rest and append it to $result
                $result .= substr($rest, 0, $pos);
                $rest = substr($rest, $pos, strlen($rest)-$pos);

                // Remove the wanted string from $rest and place it correctly into $result
                $result .= str_replace($magic_sequence, substr($rest, 0, strlen($findme)), $replacewith);
                $rest = substr($rest, strlen($findme), strlen($rest)-strlen($findme));

                $replacements_made++;
        }

        // After the last match, append the rest
        $result .= $rest;

        return $result;
}

Die Funktion kann genau so verwendet werden wie ext_str_ireplace(), nur mit dem Unterschied, dass $1 als $replacewith-Parameter durch die originale Schreibweise des $findme-Parameters ersetzt wird.

Ein Beispiel, um die Problematik zu beschreiben:

$suche = 'replaceme';
$ersetze = '<font color="#FF0000">'.$suche.'</font>';
$text = 'Please RePlaCeMe, OK?';

echo str_ireplace($suche, $ersetze, $text);

Dies wird ausgeben: Please replaceme, OK?

Und nun ein Beispiel für die Verwendung der Lösung:

$suche = 'replaceme';
$ersetze = '<font color="#FF0000">$1</font>';
$text = 'Please RePlaCeMe, OK?';

echo ext_str_ireplace($suche, $ersetze, $text);

Dies wird ausgeben: Please RePlaCeMe, OK?

Referenzen:
http://www.php.net/manual/de/function.str-ireplace.php#86090
http://www.php.net/manual/de/function.str-ireplace.php#91672
Daniel Marschall
ViaThinkSoft Co-Founder