【问题标题】:Write ISO 8859-1 string to a file with fputs() in wordpress/PHP在 wordpress/PHP 中使用 fputs() 将 ISO 8859-1 字符串写入文件
【发布时间】:2019-01-18 22:09:00
【问题描述】:

我有一个在 PHP 7.0.22 上运行的 wordpress 4.9.8 网站。该网站使用 UTF-8。我需要将 ISO 8859-1 中的订单数据输出到我们的履行提供商的 FTP 服务器。在用 fputs() 写入数据之前,我已经用 utf8_decode() 转换了数据。这一切工作正常。

但是突然间 - 我相信在 wordpress 更新之后 - 如果数据包含德语变音字符,fputs 将不再工作。例如。如果数据中有一个 'Ä',在字符串中编码为 0xC4,则 fputs 不会向文件写入任何内容,因此不会导出数据。

在我看来,在 fputs 或下面的某个地方或系统中,检查字符串中的所有字符是否都是有效字符,如果包含 ISO 8859-1 字符,则该函数被中止。

这是我的代码的摘录:

    $stream  = fopen( 'php://output', 'w' );
    fputs( $stream, $header );  // working well
    $mytext = $this->get_row_csv( $row, $headers ); // get the order data
    $mytext1 = utf8_decode($mytext); // convert to ISO 8859-1
    fputs( $stream, $mytext1 ); // OK with no umlaut, fails if umlaut is included

有没有人知道,wordpress 中发生了什么变化,或者为什么 fputs 停止使用这些德语字符以及我可以做些什么来正确书写?

【问题讨论】:

    标签: php wordpress diacritics iso-8859-1 fputs


    【解决方案1】:

    encoding - Convert utf8-characters to iso-88591 and back in PHP

    打开上面的链接会很有帮助。

    utf8_decode — 将使用 UTF-8 编码的 ISO-8859-1 字符的字符串转换为单字节 ISO-8859-1

    utf8_encode — 将 ISO-8859-1 字符串编码为 UTF-8

    【讨论】:

    • 感谢您的回答。但是,问题不在于字符串的转换,而在于将其写入文件。成功转换为 is-8859-1 后,无法写入字符串。如果字符串包含非 utf8 字符(如“Ä”的 0xC4),则 fputs 不会写入任何内容。
    • 请尝试使用二进制模式 fopen fopen('file' 'wb'); $stream = fopen('php://output', 'wb');
    • 不幸的是,这并没有解决问题。效果和之前一样。如果字符串中包含非 UTF8 字符,则不写入整个字符串。
    猜你喜欢
    • 2013-01-19
    • 1970-01-01
    • 2017-08-21
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多