是否可以在不中断站点的情况下将所有非非多字节PHP函数更改为等效的mb_(即mb_str_replace,mb_strlen等)?

时间:2019-06-19 14:55:22

标签: php unicode multibyte

我需要升级一个大型PHP网站以支持UTF-8 ...作为第一步,我想更改所有PHP代码以使用mb_函数。即使没有其他内容已更改为多字节,我是否可以立即进行操作呢? (即它不会破坏任何东西,对吧?)

在继续进行下一步(升级数据库等)之前,我想先完成PHP的工作,并使代码在我现有的非多字节站点上运行并运行。

1 个答案:

答案 0 :(得分:1)

您可以使用自定义函数来获得希望沉迷于其他机制的结果。我建议5种方法:

1)一个自定义函数,该函数读取旧字符串并将其转换为8位get_string_utf8()。用法很简单:

function get_string_utf8($string) {
  return mb_convert_encoding($string, 'UTF-8', mb_detect_encoding($string, 'UTF-8, ISO-8859-1', true));
}

$old_string = "Elämä on kaunis ja mahtavia yllätyksiä"; //Life is beautiful and can hold nice surprises

$new_string = get_string_utf8($old_string);

2)一个自定义函数,该函数读取旧文件并使用unicode(8位)file_get_contents_utf8()将其打开。用法很简单:

function file_get_contents_utf8($file) {
  $content = file_get_contents($file);
  return mb_convert_encoding($content, 'UTF-8', mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true));
}

$old_file = "Life_is_beautiful.html";

$new_file = file_get_contents_utf8("$old_file");

3)始终使用:<?php ini_set('default_charset', 'UTF-8'); ?>在您的php文件的开头。

4)如果有可能,您应该通过(通过php编写过程)将8位文件(不包含BOM)保存为unicode(UTF-8)直接提供8位文件

5)始终使用正确的元:<meta charset="UTF-8">

我希望这会有所帮助。