[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Кодировка в DomDocument
Страницы: 1, 2
zelenuy
<?php
header("Content-Type: text/html; charset=utf-8");

$html = <<<L
<!Doctype html>
<html>
<head>
<meta name="description" content="Описание сайта">
</head>
<body id="5">
Hello, Вася!
</body>
</html>

L;

$ob = new DOMDocument();
$ob->formatOutput = true;
$ob->loadHTML($html);
$str = $ob->saveHTML();
echo nl2br(htmlspecialchars($str));
?>

После выполнения этого скрипта все русские символы превращаются не пойми в че, типа этого:
&ETH;&#382;&ETH;&iquest;&ETH;&cedil;

В чем может быть причина? Сам файл в utf-8
BaNru
1)
    <head>
<meta
charset="UTF-8">
<meta
name="description" content="Описание сайта">
</head>


2) htmlspecialchars
zelenuy
BaNru
Не помогло, такое чувство что дом перекодировал во что то другое unsure.gif
BaNru
DOMDocument
Цитата
encoding

    Кодировка документа, как она задана в объявлении XML. Этот атрибут отсутствует в итоговой DOM Level 3 спецификации, но это единственный путь для управления кодировкой XML документа в данной реализации.

zelenuy
Цитата
2) htmlspecialchars

Не тоже не из-за этого
zelenuy
Цитата (BaNru @ 16.02.2014 - 21:27)
DOMDocument
Цитата
encoding

    Кодировка документа, как она задана в объявлении XML. Этот атрибут отсутствует в итоговой DOM Level 3 спецификации, но это единственный путь для управления кодировкой XML документа в данной реализации.

sad.gif Она не работает, что делать?
BaNru
Поиграться с iconv (и/или с utf8_encode() и utf8_decode()), пока не придут местные гуру )))
Цитата
Замечание:

Расширение DOM использует кодировку UTF-8. Используйте функции utf8_encode() и utf8_decode() для работы с текстами в кодировке ISO-8859-1, либо Iconv в других кодировках.
zelenuy
user posted image
zelenuy
BaNru
Еще бы знать что эта за кодировка)
По пробовал из ISO-8859-1 в utf-8 не сработало
BaNru
У меня сработало, правда чуть подправил
http://ideone.com/8d2A4G
Он походу не знает HTML5 и/или ему надо максимально приближенный к XML, т.е. XHTML
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
zelenuy
BaNru
А что делать, я пишу на 5)
Этот заголовок будет работать на 5?)
Вообще странно сделано, без заголовка все ломает, просто бы настройку сделали
zelenuy
<?php
header("Content-Type: text/html; charset=utf-8");

$html = <<<L
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="description" content="Описание сайта">
</head>
<body id="5">
Hello, World!
</body>
</html>

L;

$ob = new DOMDocument();
$ob->formatOutput = true;
$ob->loadHTML($html);
$str = $ob->saveHTML();
echo $str;
?>

Вот так работает вроде :lol: будет смесь html 4 + html 5
zelenuy
smile.gif Но если я захочу загрузить чужой html5 файл, то все опять сломается, проблема однако
BaNru
HTML5 понимает XHTML.

$html = <<<L
<!DOCTYPE HTML>
<html>
<head>
<meta name="description" content="Описание сайта">
</head>
<body id="5">
Hello, World!
</body>
</html>

L;
$html = str_replace('<head>','<head><meta http-equiv="content-type" content="text/html; charset=utf-8">',$html);
http://ideone.com/Laytvl

Разумеется тут появляется новые проблемы

1) а если где-то на странице будет еще <head>
Для этого ответ
$html  = str_replace('<head>','<head><meta http-equiv="content-type" content="text/html; charset=utf-8">',$html,1);
т.е. заменяем только первое вхождение.

2) А если уже есть meta, то вводим условие
if(preg_match(//)){}
else{str_replace()}
Кстати, можно попробовать без условий составить одну универсальную регулярку (это вполне возможно) и вместо str_replace использовать preg_replace
(это уже отдельная тема)

и т.д. до беконечности
zelenuy
BaNru
smile.gif я как раз про регулярки и подумал
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.