Не поддерживается при загрузке xml кодировка windows-1251

Line

Google, Co.
Не поддерживается при загрузке xml кодировка windows-1251

Пытаюсь прочитать xml-файл с русскими буквами в кодировке windows-1251 на PHP 5.0.5 + libxml + libiconv

И на попытку получить содержимое файла:

Warning: DOMDocument::load() [function.load]: Unsupported encoding windows-1251 in /var/www/example.xml, line: 1 in /var/www/test1.php on line 7

Хотя iconv отлично перекодирует из одной кодировки в другую.

echo iconv("WINDOWS-1251", "KOI8-R", "Проверка.");

Нужна помощь!
 

Alesto

Новичок
А ты пробовал переходить на UTF-8? Говорят очень полезная штука :)
 

Line

Google, Co.
Как ее использовать, она не поддерживает кирилицу!
 

Line

Google, Co.
Ну так это бред, получается вначале из Win-1251 в UTF8 потом опять в win-1251

-~{}~ 15.11.05 16:44:

А как решить мою проблему?
Ну подскажите

-~{}~ 15.11.05 22:40:

Автор оригинала: Line
Ну так это бред, получается вначале из Win-1251 в UTF8 потом опять в win-1251

-~{}~ 15.11.05 16:44:

А как решить мою проблему?
Ну подскажите
Так не хочется использовать UTF-8, хочтеся WINDOWS-1251
 

slach

Новичок
libxml у тебя криво собран и не знает ниче про кодировки
 

Fred

Новичок
PHP:
$doc = new DOMDocument();
$doc->encoding = "windows-1251";

$string =  iconv("windows-1251", "UTF-8", "тестовая строка");


$node = $doc->createElement("para",$string);
$newnode = $doc->appendChild($node);


echo '<pre>';
echo htmlentities($doc->saveXML());
echo '</pre>';
Отдает абракадабру. Тоже проблема с неправильно собранной libxml?

Версия php - 5.1.2
 

ilkz

Новичок
Насколько я знаю, в XML-файлах вся информация хранится в кодировке UTF-8. Следовательно, тебе по-любэ придется делать iconv() туда-сюда.
 

slach

Новичок
Fred - ВНУТРЕННЕЕ представление у всех XML документов во ВСЕХ XML \ DOM \ XSLT библиотеках это UTF (8/16 или вообще полный unicode, зависит от реализации)

libxml в php5 это utf8
если хочешь выводить в другой кодировке, то придется
но совет простой
если есть возможность (MySQL 4.1+, PostgreSQL8.x, FireBird 1.5) то лучше переходи на utf8 СРАЗУ и везде
 

Fred

Новичок
Даже если генерировать документ в родной для ДОМ кодировке, всейравно получается абракадабра.

PHP:
$doc = new DOMDocument();
$doc->encoding = 'UTF-8';

$string =  iconv("windows-1251", "UTF-8", "тестовая строка");

$node = $doc->createElement("para",$string);
$newnode = $doc->appendChild($node);

echo '<pre>';
echo htmlentities($doc->saveXML());
echo '</pre>';

echo $string;
Выдает:

<?xml version="1.0" encoding="UTF-8"?>
<para>&#209;?&#208;µ&#209;?&#209;?&#208;&#190;&#208;&#178;&#208;°&#209;? &#209;?&#209;?&#209;?&#208;&#190;&#208;&#186;&#208;°</para>

тестовая строка
 

worm

Новичок
Тут уже грабли в русском апаче
попробуй в директории скрипта создать файл .htaccess и прописать CharsetDisable On
 

Fred

Новичок
PHP:
 $string =  iconv("windows-1251", "UTF-8", "тестовая строка");
А почему тогда строка в UTF8 выводится нормально?
 

confguru

ExAdmin
Команда форума
Если есть уже PHP5 - юзайте SimpleXML
6 строчек кода и все работает.
 

Fred

Новичок
Я пока лишь изучал DOM модель. Поэтому и возник вопрос: это у меня руки кривые или у DOM проблемы с кириллицей. Собственно с такими же проблемами столкнулся и в DOM XML (PHP4).

А насущные проблемы пока решаю и без DOM-модели.

-~{}~ 07.02.06 12:29:

Автор оригинала: worm
Тут уже грабли в русском апаче
попробуй в директории скрипта создать файл .htaccess и прописать CharsetDisable On
Apache не русский, а обычный 1.3.33
 

Sherman

Mephi
я не понимаю в чем проблема-то:

Код:
$doc = new DOMDocument(); 
	$doc->encoding = 'UTF-8'; 
	
	$string =  iconv("WINDOWS-1251", "UTF-8", "тестовая строка"); 
	
	$node = $doc->createElement("para",$string); 
	$newnode = $doc->appendChild($node); 
	
	echo '<pre>'; 
	echo htmlentities($doc->saveXML(), ENT_QUOTES, "UTF-8"); 
	echo '</pre>'; 
	
	echo $string;
<?xml version="1.0" encoding="UTF-8"?>
<para>тестовая строка</para>

тестовая строка
 

sarsen

Новичок
скажите что нужно добавить вот мой парсер
PHP:
<?php
	
	require_once('include/dbLayer.php');
	require_once('include/readableData.php');
	require_once('include/settings.php');
	
	$alliancePlrs = array();
	$hordePlrs = array();
	$gmPlrs = array();

	$s = gSettings::get();
	
	$sDoc = new DOMDocument();
	$sDoc->load($s->statfile);

	
	$plrList = $sDoc->getElementsByTagName('plr');
	for($i = 0; $i < $plrList->length; $i++){
		$plr = $plrList->item($i);
		
		$ar = array( 'name' => 'Unknown', 'level' => 0, 'gender' => 0, 'race' => 0, 'class' => 0, 'map' => -1, 'areaid' => -1);
		$n = $plr->firstChild;
		while($n){
			$ar[$n->nodeName] = $n->nodeValue;
			$n = $n->nextSibling;
		}
		
		switch($ar['race']){
			case 1: // human
			case 3: // dwarf
			case 4: // night elf
			case 7: // gnome
			case 11: // draenei
				$alliancePlrs[] = $ar;
				break;
			case 2:
			case 5:
			case 6:
			case 8:
			case 10:
				$hordePlrs[] = $ar;
				break;
			default:
				// do not know where to add players
				break;
		}
		
	}
?>
Парсит вот эту страничку
PHP:
<?xml version="1.0" encoding="windows-1251"?>
<serverpage>
<sessions>
    <plr>
      <name>Сатана</name>
      <race>5</race>
      <class>5</class>
      <gender>0</gender>
      <pvprank>0</pvprank>
      <level>70</level>
      <map>530</map>
    </plr>
  </sessions>
</serverpage>
Выводит name как сатана
:(
 

Апокалипсис

тех дир matras.ru
sarsen
Не нужно писать в тему 2х летней давности. Создай новую.
И прочти правила форума обязательно ещё раз.
 

slach

Новичок
sarsen
будешь диггерствовать, поставлю read-only
не надо спамить в старые темы
 
Сверху