【问题标题】:Fix incorrectly displayed encoding on an html document with php使用 php 修复 html 文档上错误显示的编码
【发布时间】:2011-04-05 02:22:14
【问题描述】:

有没有办法修复通过 phpquery::newDocument 运行此 html 标记后显示不正确的字符?原始文档中的 -Classics with modern Woman- 周围有预定的双引号,在使用 phpquery 创建新文档后最终显示不正确。

    //Original document is UTF-8 encoded
$raw_html = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body><p>Mr. Smith of Bangkok celebrated the “Classics with modern Woman”.</p></body></html>';
print($raw_html);

$aNew_document = phpQuery::newDocument($raw_html);
print($aNew_document);

原始输出: 曼谷的史密斯先生庆祝“经典与现代女性”。

新文件输出:曼谷的史密斯先生与现代女性一起庆祝“经典”。

【问题讨论】:

    标签: php encoding phpquery


    【解决方案1】:
    1. 您需要使用UTF-8 without BOM 编码保存页面。
    2. 在脚本顶部添加此标题:

      header("Content-Type: text/html; charset=UTF-8");

    [编辑]:如何在没有 BOM 的情况下将文件另存为 UTF-8:

    根据 OP 请求,您可以在 Windows 上执行以下操作:

    1. 下载Notepad++。这是一个很棒的文本编辑器,您应该使用它。
    2. 安装它。
    3. 在包含此代码的 Notepad++ 中打开 PHP 脚本。您正在执行所有编码的页面。是的,您计算机上的那个文件。
    4. 在 Notepad++ 中,从顶部的“编码”菜单中选择“转换为 UTF-8 而不使用 BOM”。
    5. 保存文件。
    6. 通过 FTP 或您使用的任何方式上传到您的网络服务器。
    7. 现在,运行该脚本。

    【讨论】:

    • +1 因为我以前在 Windows 上时遇到过这个问题......这是 Windows 将文件保存为 CP1251(或任何代码页)。一切都应始终保存为 UTF-8,并且发送的内容也应使用 UTF-8。 Linux没有这个问题:)
    • 尝试在脚本顶部添加 -header("Content-Type: text/html; charset=UTF-8");- ,但没有解决。在这个例子中,你能清楚地表达你所说的页面被保存是什么意思吗?我认为该页面从未保存过,但在被 phpquery::newdocument() 重新创建之前存在于 linux 服务器的内存中。如果可能,您能否展示如何正确插入此代码?或者如何以正确的编码保存文档?我可能做错了什么。谢谢
    • @acidjazz,我已经更新了关于如何在没有 BOM 的情况下保存为 UTF-8 的答案。通过说。 “保存页面”,我的意思是保存没有BOM模式的UTF-8代码的文件。
    • @shamittomar - +1 好工具,谢谢。我可以看到使用它作为日食的伴侣。我真正的问题是我正在使用 $raw_html = file_get_contents($webpage_url);获取html。在这种情况下,文件永远不会被保存。这是我没有在原始帖子中指定的错。 $raw_html 中的特殊编码字符很好。当我将 $raw_html 传递给 phpquery::newdocument 时,字符编码问题就会浮出水面。
    • @acidjazz,您需要将代码为$raw_html = file_get_contents($webpage_url); 的文件保存为UTF-8 且不包含BOM,并将header("Content-Type: text/html; charset=UTF-8"); 作为其第一行。你试过这个吗? file_get_contents 符合 UTF-8。
    【解决方案2】:

    我有同样的问题,但是当我添加时

    ob_start();
    

    到第一行

    ob_end_flush();
    

    到最后它似乎正在工作

    【讨论】:

      【解决方案3】:

      你在&lt;head&gt; 元素中有这个:

      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
      

      下一个课程是使用 HTML 实体来显示这些字符。

      【讨论】:

      • 如果文件本身没有保存为UTF-8,这将无法解决问题
      【解决方案4】:

      我在使用 phpQuery 类时遇到了同样的问题。问题是如上所述,在最高投票的答案中 - 脚本文件保存为 UTF8-with BOM。

      因为我没有机会在 mac osX 上获得 notepad++,

      我准备的每一个输出都是这样utf8_decode()

      BOM 适用于 MS-windows。

      【讨论】:

        猜你喜欢
        • 2020-06-12
        • 2017-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-16
        • 2010-09-18
        • 2013-07-25
        • 2021-03-08
        相关资源
        最近更新 更多