我在输出缓冲中使用str_replace来翻译网站。 它在本地服务器和测试服务器上运行良好,但在生产服务器中完全失败。
以下是原始代码:
function lang_modify($buffer){
require('get_messages.php');
foreach($messages as $message){
$stringToBeReplaced = $message[0];
$stringReplace = $message[1];
$buffer = str_replace($stringToBeReplaced,$stringReplace, $buffer);
}
return $buffer;
}
$lang = $_SESSION['lang'];
if($lang=='en'){
$buffer = ob_start('lang_modify');
}
然后,当我将日文字符翻译成英文时,我想到了一个多字节问题,所以我用mb_ereg_replace替换了str_replace。 同样,它在本地服务器和测试服务器上工作得很好,但在生产服务器上却没有。
function lang_modify($buffer){
require('get_messages.php');
mb_regex_encoding("UTF-8");
foreach($messages as $message){
$pattern = "(".$message[0].")";
$stringReplace = $message[1];
$buffer = mb_ereg_replace($pattern, $stringReplace, $buffer);
}
return $buffer;
}
在这两种情况下,都会修改意外的字符串,从而导致javascript文件出错,并且在大多数情况下,预期的替换不会被替换。 str_replace是否有可能依赖于服务器设置?
我确切地说我不能用另一种方式来翻译网站。 我必须在生产服务器上使用它。
有没有人知道如何解决这个问题?