【问题标题】:php to rtf, é becomes éphp转rtf,é变成é
【发布时间】:2011-08-07 00:28:41
【问题描述】:

使用这个rtf class,我看到我的特殊字符被转换了,比如é becomes \'C3\'A9(那部分可能不是问题)

一旦我使用 php 标头在 rtf 中获取它,生成的字符 (é) 将被视为 é

header("Content-type: application/rtf; charset=utf-8");
header("Content-Disposition: attachment; filename=$file_rtf");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); 

奇怪!我的文件以 utf-8 格式保存,以供参考。

我在获取 excel 时遇到了类似的问题,但使用

解决了
$text = mb_convert_encoding($text,'utf-16','utf-8');

这不适用于 rtf。感谢您的帮助。

PS。我的文件是用 utf-8 编码 thro' DW 保存的,我的 mysql 默认字符集也是 utf-8。我直接从数据库中显示一个字符是没有问题的,但是这个问题只有在我之前直接在页面中输入一个特殊字符来使用页眉时才会出现。

干杯。

【问题讨论】:

    标签: php unicode utf-8 special-characters rtf


    【解决方案1】:

    好吧,最后我解决了它:

    mb_convert_encoding($text,'ISO-8859-15','utf-8');
    

    【讨论】:

      【解决方案2】:

      你得到了双重编码。 \N{LATIN SMALL LETTER E WITH ACUTE} 字符是代码点 U+00E9。在 UTF-8 中,即\xC3\xA9

      但是如果你把这两个字节视为不同的代码点 U+00C3 和 U+00A9,它们分别是 \N{LATIN CAPITAL LETTER A WITH TILDE}\N{COPYRIGHT SIGN}

      现在,一旦那些现在依次被重新编码,你会得到字节序列\xC3\x83\xC2\xA9,这就是你所看到的。

      您使用的是 Windows 系统吗?它们似乎经常对事物进行双重重新编码。

      【讨论】:

      • 伟大的解释,天哪。干杯。
      【解决方案3】:

      您应该询问脚本的作者,但从文档和提供的编码来看,它不是 UTF8 友好的。因此,您可以尝试将文本转换为您的代码页(例如 cp1251)并使用此类中的一种可用编码来找到最佳结果。

      【讨论】:

        【解决方案4】:

        嗯,从 mysql 中提取同样的问题。我的页面是用 UTF-8 编码的,我的数据库也是如此。我什至通过放置

        来强制 mysqli 进入 utf-8 模式
        if (!$mysqli->set_charset("utf8")) {echo "utf8 on";} else {echo "utf8 already on";}; 
        

        没有任何帮助,我不断得到 é

        这是我的解决方案,不是很有说服力,但它确实有效。

        echo str_replace('é', 'é', $mySQLResult);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-18
          • 1970-01-01
          • 1970-01-01
          • 2011-05-18
          • 1970-01-01
          • 2015-05-28
          • 2018-11-04
          • 1970-01-01
          相关资源
          最近更新 更多