UTF8'i kullanmak için XPath zorlamak nasıl?

3 Cevap php

Ben bir XHTML belge Greasemonkey AJAX ile bir PHP uygulaması geçirilen var. PHP uygulaması UTF8'i kullanır. Ben çıktı POST içeriği düz geri div alma AJAX bir textarea için, her şey hala düzgün UTF8 kodlanmış ise.

Ben XPath kullanarak ayrıştırmak çalıştığınızda

$dom = new DOMDocument();
$dom->loadHTML($raw2);
$xpath = new DOMXPath($dom);
$query = '//td/text()';
$nodes = $xpath->query($query);
foreach($nodes as $node) {
  var_dump($node->wholeText);
}

terk dizeleri utf8 değildir. Nasıl DOM / XPath UTF8'i kullanmaya zorlamak mı?

3 Cevap

Bir tam teşekküllü xhtml geçerli belge olup olmadığını loadHTML () ancak load () / LoadXml () kullanmanız gerekir.

Örnek xhtml belge verilen

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
    	<title>xhtml test</title>
    </head>
    <body>
    	<h1>A Table</h1>
    	<table>
    		<tr><th>A</th><th>O</th><th>U</th></tr>
    		<tr><td>Ä</td><td>Ö</td><td>Ü</td></tr>
    		<tr><td>ä</td><td>ö</td><td>ü</td></tr>
    	</table>
    </body>
</html>

script

<?php
$raw2 = 'test.html';

$dom = new DOMDocument();
$dom->load($raw2);
$xpath = new DOMXPath($dom);
var_dump($xpath->registerNamespace('h', 'http://www.w3.org/1999/xhtml'));
$query = '//h:td/text()';
$nodes = $xpath->query($query);
foreach($nodes as $node) {
    foo($node->wholeText);
}


function foo($s) {
    for($i=0; $i<strlen($s); $i++) {
    	printf('%02X ', ord($s[$i]));
    }
    echo "\n";
}

baskılar

bool(true)
C3 84 
C3 96 
C3 9C 
C3 A4 
C3 B6 
C3 BC

yani çıkış / dizeleri utf-8 kodlanmış olan

Ben denemedim, ama ikinci parametre DOMDocument::__construct kodlama ilişkili görünmektedir; belki :-) size yardımcı olacak

Else, bir encoding property in DOMDocument yazılabilir, hangi vardır.

Parametre olarak DOMDocument ile inşa başlandı DOMXPath, belki işe yarar ...

Struggled with similar problem (unable to force Xpath to use UTF-8 in combination with loadHTML), in the end this excellent article provided the solution: http://devzone.zend.com/article/8855

workaround:

Insert an additional section with the appropriate Content-type HTTP-EQUIV meta tag immediately following the opening tag.