I have an array with Hebrew words that I need to find in a string and replace. The translation array is defined as key-value pairs.
In English, this works.
function replace_twophrase_words($string) {
$string = strtolower($string);
$replacements = array (
'movers' => 'Moving Services',
'home-moving' => 'Home Moving',
'commercial-moving' => 'office-moving',
);
$string = str_replace($replacements, array_keys($replacements), $string);
}
Hebrew array (asked in comments):
$replacements = array (
'עיצוב-פנים' => 'עיצוב פנים',
'עיצוב-פנים' => 'מעצבת פנים',
'עיצוב-פנים' => 'עיצוב משרדים',
);
But... it seems that this doesn't work in Hebrew at all. Can anyone explain what's gone wrong?
You need to use mb_ereg_replace:
setlocale( LC_CTYPE, 'en_US.UTF-8' );
header( 'Content-Type: text/plain; charset=utf-8' );
echo mb_ereg_replace( 'עיצוב-פנים', 'עיצוב פנים', 'Hebrew string is here: עיצוב-פנים ; and back to Latin.' );
This is because Hebrew letters are composed of multiple bytes and str_reaplce and preg_replace (by default) do not understand these.