指示使用objDOM对XML文件进行编码->;load()


Indicate encoding of XML file using objDOM ->load()

我正在尝试读取一个XML文件,然后将获得的值输入到数据库中。只要XML中没有特殊字符,整个过程就可以很好地工作。XML的格式为:

<link>
<name>Cech</name>
<club>Chelsea</club>
</link>

如果name标记包含一个类似Suárez的名称,我会得到错误:Input is not proper UTF-8, indicate encoding ! Bytes: 0xE1 0x72 0x65 0x7A in file:///C:/wamp/www/ADB/links.xml, line: 1857 in C:'wamp'www'ADB'phptry.php on line 14,其中第1857行的名称为Suárez。我尝试在文件的开头包含<?xml version="1.0" encoding="UTF-8"?> 并使用utf8_encode(file_get_contents('links.xml')),但它不起作用。有什么建议吗?这是我的工作php代码:

<?php 
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
$objDOM = new DOMDocument();
//$content = utf8_encode(file_get_contents('links.xml'));
$objDOM->load('links.xml'); //make sure path is correct

$note = $objDOM->getElementsByTagName("link");
  // for each note tag, parse the document and get values for
  // tasks and details tag.
  foreach( $note as $value )
  {
    $player = $value->getElementsByTagName("name");
    $player_name  = $player->item(0)->nodeValue;
    $playername = addslashes($player_name);
    $club = $value->getElementsByTagName("club");
    $club_name  = $club->item(0)->nodeValue;
//  $points = $value->getElementsByTagName("points");
//    $point_value  = $points->item(0)->nodeValue;
    $sql = "INSERT INTO pilayers (name,club) VALUES('$playername','$club_name')";
    mysql_select_db('players');
    $retval = mysql_query( $sql, $conn );
    if(! $retval )
    {
        die('Could not enter data: ' . mysql_error());
    }
    echo "Entered data successfully'n";
  }
mysql_close($conn);  
?>

错误表明xml文件未在utf-8中编码。您在PI指令中声明了编码,但这并不意味着您的编辑器真的保存了utf-8。

如何更改编码取决于您的编辑器/ide。

  • Eclipse:Edit->Set Encoding
  • PHP风暴:File->File Encoding