如何在包含阿拉伯字符的字符串上使用str_replace?

时间:2017-06-02 14:37:28

标签: php laravel laravel-4 str-replace arabic

我在Laravel 4.2中做了一个多语言项目。其中一种语言是阿拉伯语。除了使用语言文件(https://laravel.com/docs/4.2/localization)进行参数替换外,一切正常。我将向您展示纯PHP中的示例。最终结果是一样的,也许我可以编写自己的函数来修复它。

$string = [
   'L143' => ':company_name استعراض وتقييم',
   'L155' => 'تقييم :total_points التقييم يستند إلى',
];
echo str_replace(':company_name', 'Testname', $string['L143']);
echo "\n";
echo str_replace(':total_points', '1234', $string['L155']);

结果:

Testname استعراض وتقييم
تقييم 1234 التقييم يستند إلى

预期结果:

第一个例子是corect。在第二个例子中,单词顺序似乎是相反的。

以上示例也可在此沙箱中使用:http://sandbox.onlinephpfunctions.com/code/91fff23e333b3e090ca72d9ce8eb7a2af6d3f999

我有两个问题:

  1. 如何解决这个问题" pure" PHP?
  2. 如何在Laravel 4.2中解决这个问题?
  3. 谢谢!

1 个答案:

答案 0 :(得分:0)

我在PHP7.2中遇到了这个问题。我研究了一下,认为问题是PHP中的字符串处理机制。如果要在RTL字符串中替换LTR字符串,PHP会认为整个字符串都是RTL。因此,请在替换之前创建LTR字符串;


echo str_replace(':total_points', chr(0xe2) . chr(0x80) . chr(0x8e) . '1234', $string['L155']);

此外,您可以在Wiki上了解有关RTL字符串的信息; https://en.wikipedia.org/wiki/Left-to-right_mark