2

此代码适用于我的虚拟主机,但不适用于我的本地主机。我怎样才能让它在我的本地主机上工作(我使用 Windows)?

文件名是“åäö.html”。

<?php

$src = 'testing';

$file_name = 'åäö.html';

$fopen=fopen($file_name, 'w');
fwrite($fopen, $src);
fclose($fopen);

?>
4

1 回答 1

3

MS Windows 以字符编码的常见问题而闻名。在您的情况下,您的“网络主机”似乎使用 UTF-8 作为编码,而您的本地 MS-Windows 系统使用 8 位编码。这可能是某种 ISO-8859 编码,但更有可能是不知名的 windows 代码页 1251 或其他几乎但不是真正的 ISO 编码。这似乎很可能,因为您可以看到 3 个 utf 字符在您的 MS-Windows 系统中被“转换”为六个字符。典型用于非 ASCII 字符。

您有以下三种选择:

  1. 尝试使用 phpsdefault_charset设置。您可以在 Web 服务器 php 解释器使用的 php.ini 文件中找到它。
  2. 您将 MS-Windows 系统切换为在内部使用 UTF-8 编码,就像现在其他系统所做的那样(这显然是有道理的)。然而这并不容易,尤其是切换现有系统可能不是一个好主意。
  3. 您必须转换在两个世界之间交换的所有字符串。由于编码的自动检测不能可靠地工作(实际上可以证明它不能可靠地工作),因此您必须对特定的转换进行编码。PHP 确实提供了这样的例程,但从长远来看这样做很痛苦。在这种情况下,您传输一个 php 文件,这意味着手动将所有此类字符串(编程语言仅使用 ASCII 字母,它们在两种编码中都是“合法”字符,但string值不是这种情况)到其他编码.

顺便说一句:您可以通过使用允许在编码之间轻松切换的文本编辑器来玩一些编码(来回切换)。这有助于了解正在发生的事情。HexEditor 是一个非常有用的工具,可以找出文件中真正存储的内容:-)

于 2012-10-15T21:30:17.153 回答