Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP DOMDocument nodeValue返回不同的编码_Php_Encoding_Character Encoding_Html Parsing - Fatal编程技术网

PHP DOMDocument nodeValue返回不同的编码

PHP DOMDocument nodeValue返回不同的编码,php,encoding,character-encoding,html-parsing,Php,Encoding,Character Encoding,Html Parsing,当使用DOMDocument解析html文档时,我从nodeValue获得不同的编码。在我的开发环境中,我得到了UTF-8,但是当将脚本上传到Web服务器时,我得到了ISO-8859-1 有人能解释这种行为以及如何获得相同的编码吗 <?php header('Content-Type:text/html; charset=UTF-8'); $strHtml = file_get_contents("http://www.aftonbladet.se/senastenytt/ttnyhete

当使用DOMDocument解析html文档时,我从nodeValue获得不同的编码。在我的开发环境中,我得到了UTF-8,但是当将脚本上传到Web服务器时,我得到了ISO-8859-1

有人能解释这种行为以及如何获得相同的编码吗

<?php
header('Content-Type:text/html; charset=UTF-8');
$strHtml = file_get_contents("http://www.aftonbladet.se/senastenytt/ttnyheter/inrikes/article13397806.ab");

$objDOM= new DOMDocument();
@$objDOM->loadHTML($strHtml);
echo "Encoding: ". $objDOM->encoding."<br/>";

//Parse heading from DOMDocument
$objNodelist = $objDOM->getElementsByTagname('h1');
foreach ($objNodelist as $objElem)
{
    $strNodeValue = $objElem->nodeValue; //get the 
    break;
}
echo 'nodeValue: "'.$strNodeValue.'"<br/>';
echo 'utf8_decode: "'.utf8_decode($strNodeValue).'"<br/>';
echo 'utf8_encode: "'.utf8_encode($strNodeValue).'"<br/>';

//Parse heading using substring from html
$strHeading = substr($strHtml , strpos($strHtml, '<h1 class="abS32">')+18, strpos($strHtml, '</h1>') - strpos($strHtml, '<h1 class="abS32">')-18);
echo 'Heading from substring: "'.$strHeading.'"';
?>

在开发环境中运行时的输出
编码:utf-8
nodeValue:“När semesten inleds vankasåska”
utf8_解码:“N�里塞梅斯内德斯万卡斯酒店�ska“
utf8ÃU编码:“NÃr西面入口vankasÃ¥ska”
子串标题:“När semestern inleds vankasåska”

在公共web服务器上运行时输出 编码:utf-8
nodeValue:“西部进口货车”
utf8_解码:“När semesten inlineds vankasåska”
utf8编码:“NÃr西部入口vankasÃ¥ska”
子串标题:“När semestern inleds vankasåska”


显然,utf8_解码需要在公共web服务器上使用,但不能在我的开发环境中使用。我希望在两个系统上都有相同的行为。有什么想法吗?

我能想到这种行为的两个可能原因

首先,查看两个php.ini文件中的默认_字符集。我想你会发现一个设置为“iso-8859-1”(默认设置),另一个设置为“utf8”

其次,检查用于从php连接到数据库的代码,以及数据库连接的定义。这些也可能不同

您可以使用以下代码将Mysql连接切换到utf-8

if (phpversion() > "5.0.7") {
        $result = mysql_set_charset('utf8');
    } else {
        $result = mysql_query("SET NAMES 'utf8' COLLATE 'utf8_unicode_ci';");
    }

通过在web酒店服务器上更新PHP解决了这个问题

web hotel上的旧配置:
PHP版本:5.2.6-1+lenny13
libxml版本:2.6.32

网络酒店的更新配置:
PHP版本5.3.3-7+挤压3
libxml版本2.7.8

脚本现在在两种环境中生成相同的输出
编码:utf-8
nodeValue:“西部进口货车”
utf8_解码:“När semesten inlineds vankasåska”
utf8编码:“NÃr西部入口vankasÃ¥ska”

子字符串标题:“När semestern inleds vankasåska”

谢谢你的提示!然而,在这两个系统中,缺省_字符集似乎都设置为“no value”。此外,在我损坏数据并将其存储在数据库中之前,这个问题就会发生,因此它不应该与MySQL相关。
MySQL\u set\u charset()
需要PHP 5.2.3或更高版本和MySQL 5.0.7或更高版本。您在开发和生产中使用的PHP版本是什么?