使用PHP和COM对象将西里尔字符发送到Word

时间:2013-06-22 12:32:31

标签: php com internationalization

我正在构建一个需要通过COM对象创建Word文档的PHP应用程序。我通过检查记录的测试宏的代码找到了大部分所需的函数,但我仍然找不到传递西里尔字符的写方式。我正在尝试以下方法:

$word->Selection->TypeText(ChrW(1091) & ChrW(1085) & ChrW(1080) & ChrW(1074) & ChrW(1077) & ChrW(1088) & ChrW(1089) & ChrW(1080) & ChrW(1090) & ChrW(1077) & ChrW(1090));

我收到以下错误:

  

致命错误:调用未定义的函数ChrW()   第42行的C:\ xampp \ htdocs \ xampp \ COM \ test.php

不幸的是我找不到COM对象的任何文档,特别是对于PHP,所以我在这里提出我的问题,希望有人可以帮助我。

2 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但我在使用PHP和COM将毛利字符发送到Word时遇到了类似的问题。答案是我如何创建COM对象:

$wordApp = new COM("word.application", null, CP_UTF8); // <-- Important to specify codepage CP_UTF8
// Open document...
...
$text = "Chars with macrons: Ā ā Ē ē Ī ī Ō ō Ū ū"; // UTF-8 string
$wordApp->Selection->TypeText($text);
...

COM的第三个参数是代码页,它指定对传入/传出COM对象的字符串使用的转换。通过指定 CP_UTF8 ,我告诉COM我将传入的所有字符串(如$text中的$wordApp->Selection->TypeText($text);)将使用UTF-8和我收到的所有字符串进行编码,我想用UTF-8编码。如果您未指定代码页,则使用默认值,可能是Windows-1252(Western)。

有关详细信息,请点击此处:http://php.net/manual/en/class.com.php

答案 1 :(得分:0)

  

我在我的文档中得到了奇怪的符号:унивÐμÑ€ÑиÑ,ÐμÑ

我不确定Word文档的字符集是什么以及推荐的方法是什么。

如果没有任何权威信息,我会尝试将数据提供给它并在字符集之间进行转换,直到它工作。

确保您的PHP文件是UTF-8编码,然后尝试

$text = "Привет, как дела";

$word->Selection->TypeText(iconv("utf-8", "utf-8", $text);       // no conversion
$word->Selection->TypeText(iconv("utf-8", "iso-8859-5", $text);  // cyrillic codepage
$word->Selection->TypeText(iconv("utf-8", "utf-16", $text);  // not sure whether this will work

其中一个可能适合您,具体取决于文档的字符编码。

可能有一种COM方法来定义文档的编码。如果有,那将是使用它并将编码设置为UTF-8的理想方式。