ViaThinkSoft CodeLib
This article is in:
CodeLib → Programming aids → PHP
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:
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:
Dies wird ausgeben: Please replaceme, OK?
Und nun ein Beispiel für die Verwendung der Lösung:
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
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
ViaThinkSoft Co-Founder