LINUX.ORG.RU
ФорумAdmin

Глюки с кодировкой в php 5.4.4


0

2

Подскажите, есть решение проблемы с кодировкой в php 5.4.4?

Во всех функциях не понимает кодировку, в запросе к Mysql, даже В htmlspecialchars($text,ENT_QUOTES,'cp1251'); - нужно специально указывать кодировку в которой текст, иначе возвращает пустую строку или знаки вопросов. Причем в ерроре - эти ошибки не как не отражаются!


и mail() все месседжи в вопросах присылает :(

Roman_S
() автор топика

http://docs.php.net/manual/ru/function.htmlspecialchars.php

В 5.4.0 значение по умолчанию для параметра encoding было изменено на UTF-8, что поломало изрядную кучу старого кода.

В mysql скорее всего не верно задана кодировка для соединения. ЕМНИП можно починить выполнением запроса «SET NAMES 'нужная кодировка'»

NeOlip ★★
()
Ответ на: комментарий от NeOlip

А есть функция которую можно выставить в начале скрипта, работающий с иной кодировкой - что бы каждую функцию не менять?

setlocale(LC_ALL, 'ru_RU.CP1251'); - не особо помагает. :(

А вот с mail() - не пойму и utf-8 страницу перекодировал и формат отправки в utf-8 поставил, все равно какой то дуст шлёт: грщгрщ

Roman_S
() автор топика
Ответ на: комментарий от Roman_S

функция mail() - где то отдельно видемо регулируется. Потому что в скрипте - текст правильно отражается. Заголовок без ошибок:

Return-Path: <site.ru@main.localdomain> Delivered-To: q@site.ru Received: by main.localdomain (Postfix, from userid 11537) id 62EC15D357; Mon, 19 May 2014 19:18:13 +0400 (MSK) To: q@site.ru Subject: =?UTF-8?B?w5DCoM5OQwrDDkMK3w5DCvMOQwrXDkcKJw5A=?= =?UTF-8?B?wrXDkMK9w5DCuMOQwrUgw5DCoM5OQwrXDkMK6w5DCu8OQwrDDkMK8w5HCiw==?= X-PHP-Originating-Script: 11537:mailtest.php MIME-Version: 1.0 Content-type: text/plain; charset=utf-8 From: 3333@yyyy.ru Reply-To: 3333@yyyy.ru Content-Transfer-Encoding: BASE64 Message-Id: <2014051951813.62EC15D357@main.localdomain> Date: Mon, 19 May 2014 19:18:13 +0400 (MSK)

Roman_S
() автор топика
Ответ на: комментарий от Roman_S

Нашел решение, если кому понадобится: в пхп.ини ставим не mbstring.func_overload = 7, а mbstring.func_overload = 6!

И все заработало!

Roman_S
() автор топика
Ответ на: комментарий от Roman_S

Это по мылу ... А локаль не везде принимает - здесь проблема осталась.

Roman_S
() автор топика
Ответ на: комментарий от NeOlip

В 5.4.0 значение по умолчанию для параметра encoding было изменено на UTF-8, что поломало изрядную кучу старого кода.

С учётом того, что до этого по дефолту был latin1, что могло поломаться в Рунете? Итак все кодировку по умолчанию переключали на koi8-r/cp1251/utf-8.

KRoN73 ★★★★★
()

Про htmlspecialchars в багтрекере пыхапы война идёт нешуточная уже давно, многие обвиняют девелоперов в поломке обратной совместимости и они правы. У меня интранет сайт похерился после обновления до 5.4, пришлось лезть в чужой код эти кодировки пихать.

Причем никакого способа глобально указать этой функции кодировку НЕТ, никакие опции в php.ini не влияют. Люди там используют PEAR расширения для оверлоада функций и прочие извращенские методы.

В общем пэхапе двойка.

blind_oracle ★★★★★
()
Ответ на: комментарий от KRoN73

Никто ничего не переключал, кодировка в пэхапе.ini никак на эту функцию не влияла и всё работало. А теперь эта функция вырезает все символы, не соответствующие кодировке, по дефолту проходят только латинские буквы, цифры и спецзнаки всякие, cp1251 срезает под чистую. Я с этим полдня протрахался.

blind_oracle ★★★★★
()
Ответ на: комментарий от Roman_S

Нашел решение, если кому понадобится: в пхп.ини ставим не mbstring.func_overload = 7, а mbstring.func_overload = 6!

Простите, а на кой черт вам в сайте с cp1251 перегрузка функций?

Если что, mbstring.func_overload задает битовую маску: 1 для перегрузки функции mail(), 2 для строковых функций, 4 для функций регулярных выражений. Перегрузку для mail вы убрали, осталось еще два.

А вызовы htmlspecialchars таки придется поменять.

NeOlip ★★
()
Ответ на: комментарий от KRoN73

Ты, наверное, не понял. Этой функции нельзя задать кодировку по умолчанию, её нужно указывать при *каждом* вызове или писать обертку.

И её поведение изменилось, раньше даже с дефолтной кодировкой (latin1 или какая там была) она пропускала символы из cp1251, а теперь - нет.

blind_oracle ★★★★★
()
Ответ на: комментарий от NeOlip

Да нет, строковые функции - работают без глюков.

Roman_S
() автор топика
Ответ на: комментарий от KRoN73

Вот кстати ещё один глюк: addslashes(), а здесь что случилось?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.