[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: php + unicode
cx717
Добрый день.
Скажите пожалуйста как с помощью php создавать и редактировать
файлы в юникоде (или utf-8).
Весь день искал в инете. Кроме того, что нужно подключать mbstrin, так ничего и не понял.
Заранее благодарю.



Спустя 7 минут, 30 секунд (2.08.2010 - 11:03) Гость_Michael написал(а):
В файл записывай просто данные в кодировке utf-8. Если сам php файл в utf-8 - так сразу и пиши(т.к. строки уже будут в utf-8).

Любые строковые функции если потребуются - верно - из набора mb.

Если данные какие то не в utf-8 надо записать в файл, то перекодируй сначала функцией iconv.

Спустя 2 минуты, 21 секунда (2.08.2010 - 11:05) Lenarfate написал(а):
в заголовке выставить charset="utf-8"

создать файл .htaccess в корне и написать в нем AddDefaultCharset UTF-8

mb_string - это библиотека для работы с мультибайтовыми кодировками. включается так:
в файле php.ini находите строки ;extension=php_mbstring.dll и убираете в начале точку с запятой

Спустя 1 минута, 35 секунд (2.08.2010 - 11:07) cx717 написал(а):
Lenarfate, А что делать, если php не utf-8?

Спустя 1 минута, 1 секунда (2.08.2010 - 11:08) Lenarfate написал(а):
header('Content-type="text/html", charset="utf-8"');

так же сказали выше, можно использовать функцию iconv()

Спустя 3 минуты, 6 секунд (2.08.2010 - 11:11) cx717 написал(а):
Спасибо, сейчас попробую

Спустя 7 часов, 53 минуты, 17 секунд (2.08.2010 - 19:04) cx717 написал(а):
C юникодом более менее разобрался.
Возник немного другой вопрос.


Я создаю блокнотом файл xml.xml и ставлю ему кодировку utf-8.
Далее пишу скрипт:

$fh = fopen("xml.xml", "r") or die("Can't open file!");
$file = fread($fh, 2000);
print $file;
fclose($fh);

Что получаю:
п»ї company_profile contacts


Строка $file = fread($fh, filesize($fh)); не работает в принципе ( ругается на функцию filesize($fh) ).

Вопрос: возможно ли обойтись в данном случае без xml парсера, а просто
изменять xml файл (что-то удалять, что-то добавлять) по средствам mb функций ?

Ну и интересно почему filesize($fh) не проходит.

Заранее спасибо.

P.S.

xml.xml:

<?xml version="1.0"?>
<body>
<company_profile>
company_profile
</company_profile>
<contacts>
contacts
</contacts>
</body>

Спустя 35 минут, 43 секунды (2.08.2010 - 19:40) arvitaly написал(а):
filesize($fh)


не проходит потому что функция принимает путь к файлу, а не указатель на открытый файл

Можете залить сюда свой созданный файл?

Спустя 1 час, 37 минут, 34 секунды (2.08.2010 - 21:17) cx717 написал(а):
Спасибо всем за ответы, кое как разобрался.

Оказалось сначало бы разобраться надо с другим немного.

Есть файл в котором хранится русский и английский тексты.
Нужно что бы этот файл можно было редактировать.
Как я понял этот файл может быть xml и тогда надо писать xml парсер, читать
и писать в этот xml файл.

Либо просто с помощью регулярных выражений обрабатывать (читать
и писать) этот файл.
Я не силен в регулярных выражениях (возможно их возможностей и не хватит для поставленной задачи).

Подскажите плз в каком направлении думать?

Заранее благодарю.


Спустя 2 часа, 14 минут, 57 секунд (2.08.2010 - 23:32) arvitaly написал(а):
http://php.net/manual/en/book.xml.php

Там все просто

// Создаем SAX парсер, который будет использоваться для
// обработки XML-данных.

$parser = xml_parser_create();
// Регистрируем функции для обработки различных типов
// XML-данных:
// - начальный и конечный тэги XML

xml_set_element_handler($parser,'saxStartElement','saxEndElement');
// - символьные данные
xml_set_character_data_handler($parser,'saxCharacterData');
// Также существуют аналогичные функции для регистрации
// обработчиков других типов XML-данных.
// Убираем case folding, в этом случае имена тэгов будут
// передаваться обработчикам в оригинальном виде. Если case
// folding включен, то все имена тегов будут переведены
// в верхний регистр.

xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,false);
// Получаем содержимое XML-файла с новостями.
$xml = join('',file('http://informer.gismeteo.ru/xml/27595_1.xml'));
// Производим парсинг (разбор) полученного XML-файла.
// В процессе разбора парсер будет вызывать описанные нами
// функции и в результате мы получим массив $news,
// содержащий новости из XML-файла.

if (!xml_parse($parser,$xml,true))
// Парсер возвращает значение FALSE, если произошла
// какая-либо ошибка. В этом случае мы также прекращаем
// выполнение скрипта и возвращаем ошибку.
/*die(sprintf('Ошибка XML: %s в строке %d',
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));*/
// Уничтожаем парсер, освобождая занятые им ресурсы

xml_parser_free($parser);


+ соответствующие функции (сам разберись уж)

Спустя 16 часов, 15 минут, 1 секунда (3.08.2010 - 15:47) cx717 написал(а):
Оказалось парсить ничего не нужно.

Вот такой код делает все в три строчки:
$xml = Simplexml_load_file('test.xml');
$xml->book[1]->pages = 234;
$xml->asXML('test.xml');


Остается вопрос: после выполнения последней строчки кода
в файле 'test.xml' все переносы строки заменяются на квадратики.
Как по вашему можно этого избежать?


Спустя 3 часа, 5 минут, 17 секунд (3.08.2010 - 18:53) cx717 написал(а):
Понял, открывать редактором нормальным нужно xml.
Быстрый ответ:

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