str Replace / preg 使用数组将希伯来语单词替换为希伯来语单词

问题描述 投票:0回答:2

好的。所以我有一个数组,其中包含我需要在字符串中查找并替换的单词
与他们的键(数组中该单词的键)。

在英语中,这有效。

   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);
}

希伯来语数组(在评论中询问):

$replacements = array (
    'עיצוב-פנים'            =>  'עיצוב פנים',
    'עיצוב-פנים'            =>  'מעצבת פנים',
    'עיצוב-פנים'            =>  'עיצוב משרדים',
);

但是...似乎这在希伯来语中根本不起作用...
谁能抛出一个指针/一些示例代码?

preg_replace 可能是一个很好的替代品,但我不知道如何为这种情况编写模式(所以它也是可选的)

感谢您的帮助。

php arrays regex preg-replace str-replace
2个回答
0
投票

您需要使用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.' );

这是因为希伯来字母是由多个字节组成的,str_reaplce 和 preg_replace (默认情况下)不理解这些。


0
投票

让您困惑的不是本机 PHP 函数的行为,而是您定义包含从右到左字符的查找数组的方式。

您的数组声明为:

$replacements = array (
    'עיצוב-פנים'  =>  'עיצוב פנים',
    'עיצוב-פנים'  =>  'מעצבת פנים',
    'עיצוב-פנים'  =>  'עיצוב משרדים',
);

请注意,对于 RTL 字符串,

=>
的方向也会受到影响。如果你用
var_export()
打印出来,你会得到:

array (
  'עיצוב-פנים' => 'עיצוב משרדים',
)

您会看到每行右侧的三个相同的值“实际上”是键,PHP 不允许您在数组的单个级别上有重复的键。因此,您的数据不仅会崩溃,而且无法按替换任务的预期工作。

要更正数据,请颠倒预期键和值的位置。
[value <= key, ...]

$replacements = array(
    'עיצוב פנים' => 'עיצוב-פנים',
    'מעצבת פנים' => 'עיצוב-פנים',
    'עיצוב משרדים' => 'עיצוב-פנים',
);

然后 
echo strtr($input, $replacements);

将完全按照预期工作。 );

str_replace()

也可以工作,但您需要将键隔离为值数组,并分别传递查找和替换参数。因为所有替换都是相同的,所以如果您要使用

str_replace()
,您可以将单个字符串值写入作为第二个参数。
这是上面讨论的所有内容的演示。 

https://3v4l.org/pms5Z

© www.soinside.com 2019 - 2024. All rights reserved.