Решено. Меняется кодировка в php при обработке строк

Модератор: Модераторы разделов

azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Решено. Меняется кодировка в php при обработке строк

Сообщение azsx »

Меняется кодировка при использовании сложения строк функциями substr и mb_substr. Как это исправить? Вот исходный код:

Код: Выделить всё

 <html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<body>

<?php
$dan = fopen('s.txt', 'r');
$line = fgets($dan);
echo "верно отображает $line";
$line1 = mb_substr($line, 0, 19) & mb_substr($line, 30, 40);
echo "не верно отображает $line1";
?>
</body></html>

текстовой файл s.txt

Код: Выделить всё

 ляляляляля ляляляляля ляляляляля ляляляляля ляляляляля ляляляляля ляляляляля ляляляляля ляляляляля

И файл и программа в утф-8, однако кодировка меняется при использовании сложения &. То есть переменная $line1 становится совсем другой кодировкой (становиться iso-8859-и дальше по циферкам не знаю, в 1 работает).
я разместил файл программы и текстовой файл для скачивания
http://narod.ru/disk/22624343000/s.zip.html
может так будет понятней кому нибудь.
Спасибо сказали:
neol
Сообщения: 600
ОС: Debian Stable

Re: Решено. Меняется кодировка в php при обработке строк

Сообщение neol »

azsx писал(а):
24.07.2010 06:49
И файл и программа в утф-8, однако кодировка меняется при использовании сложения &.

Сложение строк в PHP выполняет оператор "." (точка)

Код: Выделить всё

$line1 = $line.$line2;

а "&" - это конечно тоже сложение, только битовое. Естественно из строки получается абракадабра.
Спасибо сказали:
vel21ripn
Сообщения: 14

Re: Решено. Меняется кодировка в php при обработке строк

Сообщение vel21ripn »

neol писал(а):
24.07.2010 10:31
azsx писал(а):
24.07.2010 06:49
И файл и программа в утф-8, однако кодировка меняется при использовании сложения &.

Сложение строк в PHP выполняет оператор "." (точка)

Код: Выделить всё

$line1 = $line.$line2;

а "&" - это конечно тоже сложение, только битовое. Естественно из строки получается абракадабра.

для корректрой работы с utf-8 нужно использовать функции mb_хххх предварительно задав кодировку
либо явно через mb_internal_encoding("UTF-8") либо через php.ini

PS а нет ли в начале файла Byte Order Mark ?
Спасибо сказали: