Manchmal kann man ein zunächst schwierig erscheinendes Ersetzungsproblem einfach lösen wenn man einen Zwischenschritt einführt.
Im folgenden Beispiel werden so unerwünschte Mehrfachersetzungen verhindert.
<?php
// Zahlen in String durch Unicode-Entities fuer die entsprechende arabischen Ziffern ersetzen
$text = 'In diesem Text sollen die Zahlen 0123456789 durch arabische Ziffern ersetzt werden.';
$search_for_list = array('0', '1', '2', '3', '4', '5', '6', '7', '8' ,'9');
$intermediate_list = array('0_', '1_', '2_', '3_', '4_', '5_', '6_', '7_', '8_' ,'9_');
$replace_with_list = array(
# UNICODE arabische Ziffern
'۰',
'١',
'۲',
'۳',
'٤',
'٥',
'٦',
'٧',
'٨',
'٩',
);
$text = str_replace($search_for_list, $intermediate_list, $text);
$text = str_replace($intermediate_list, $replace_with_list, $text);
print $text;
?>
Zur Veranschaulichung des Problems hier noch ein Versuch ohne Zwischenschritt.
Es kommt durch unerwünschte Ersetzungen zu ungültigen Entities.
<?php
$search_for_list = array('0', '1', '2', '3', '4', '5', '6', '7', '8' ,'9');
$replace_with_list = array(
# UNICODE arabische Ziffern
'۰',
'١',
'۲',
'۳',
'٤',
'٥',
'٦',
'٧',
'٨',
'٩',
);
$text = ' Es sollen die Zahlen 0123456789 durch arabische Ziffern ersetzt werden.';
$text = str_replace($search_for_list, $replace_with_list, $text);
print $text;
?>