0

我将我的数据作为 UTF8 存储在我的 MSSQL 中(我确定它是 UTF8),我使用 Visual Studio 调试工具,我可以看到我的字符串为 UTF8(因为某些字符只在 UTF8 中退出,而不是 big5),但是在我使用之后PHP 通过 IIS fastCGI 显示我的数据,结果是 big5!。

我建立了一个简单的类来测试它。你可以试试。

using System.EnterpriseServices;
using System.Runtime.InteropServices;

namespace CoreService.HTML
{
    public interface ICore
    {        
        string get_string();
    }

    public class Core : ServicedComponent, ICore
    {
        public string get_string()
        {
            return "堃";
        }    
    }

}

如果你得到字符而不是 ?? 那么你做对了。但是在我的 PHP 中调用 COM+ 之后,我总是会变大。我尝试了apache,它仍然是一样的。

更新:

PHP 示例代码:

$object =  new COM("CoreService.HTML.Core") or die("Unable to instantiate CoreService COM object");
echo $object->get_string();

COM+ 安装批处理文件:(install.bat)

cd\
c:
cd C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\
gacutil /i "c:\Fashion DLL\CoreService.dll"
echo install CoreService.dll Done
cd\
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
regsvcs /u "c:\Fashion DLL\CoreService.dll"
regsvcs "c:\Fashion DLL\CoreService.dll"
echo FashionCoreService done

如果您想重试,您可以使用它来卸载 tlb 文件或文件被 IIS 或 apache 锁定:

cd\
c:
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
regsvcs /u "c:\Fashion DLL\CoreService.dll"
regasm /u "c:\Fashion DLL\CoreService.dll"
echo remove FashionCoreService done
iisreset
del "c:\Fashion DLL\CoreService.tlb"
pause
4

1 回答 1

0

我找到了解决方案。

$object = new COM("CoreService.HTML.Core", null, 65001) or die("无法实例化CoreService COM对象"); 回声 $object->get_string();

第三个参数是 codepage 参数,只要指定 65001 (utf-8) 那么 PHP 将使用 UTF-8 连接 COM。

于 2013-07-04T01:32:31.740 回答