Меню Рубрики

Установка mbstring для php

Функции мультибайтных строк

В то время как есть много языков, в которых каждый необходимый символ может быть представлен взаимно-однозначным отображением к значению на 8 битов, есть также несколько языков, которые требуют ,большего числа символов для письменной связи, которая не может содержаться в пределах одного байта. Многобайтовая кодировка символов была разработана для работы с более чем 256 символами в правильной bytewise кодировке.

Когда Вы управляете строками (вырезка, разбивание, соединение, и т.д.) , закодированных в многобайтовом кодировании, Вы должны использовать специальные функции, так как два или больше последовательных байта могут представить единственный(отдельный) символ в таких схемах кодирования. Иначе, если Вы применяете однобайтовую строковую функцию к строке, созданной из многобайтовых символов, функция будет не в состоянии обнаруживать начало или окончание многобайтовых символов.

mbstring обеспечивает эти многобайтовые определенные строковые функции, которые помогают Вам иметь дело с многобайтовым кодированием в PHP, который, как предполагается, используется с единственным(отдельным) кодированием байта. В дополнение к этому, mbstring обрабатывает символ, кодирующий преобразование между возможными парами кодирования.

mbstring также предназначен, чтобы обработать кодирование на основе UTF-8 и UCS-2 и других (смотрите ниже), так как mbstring был первоначально разработан для использования в японских web-страницах.

Требования Кодировки Символов PHP4

однобайтные символы находятся в диапазоне 00h-7fh , что совместимо с ASCII

многобайтное кодирование — вне диапазона 00h-7fh

Вот примеры внутренней кодировки символов, которые работают и НЕ работают с PHP.

Кодировки символов, не работающие с PHP, могут быть конвертированы с помощью функции конвертации HTTP-ввода/вывода модуля mbstring .

Примечание: SJIS не должна использоваться для внутреннего кодирования, если читатель не знаком достаточно хорошо с вопросами работы разборщика/компилятора и кодирования символов.

Примечание: Если вы используете БД с PHP, рекомендуется использовать одну кодировку для БД и internal encoding/внутреннего кодирования для облегчения использования и повышения производительности.

Если вы используете PostgreSQL, он поддерживает кодировки символов, которые отличаются от backend-кодировки. См. детали в учебнике PostgreSQL.

mbstring это модуль расширения. Вы обязаны подключить его скриптом configure . См. детали в разделе Инсталяция.

Следующие опции конфигурации имеют отношение к модулю mbstring:

—enable-mbstring : включает функции mbstring . Эта опция нужна для использования mbstring -функций.

—enable-mbstr-enc-trans : включает конвертацию кодировки символов HTTP-ввода с использованием mbstring -машины конвертации. Если эта возможность включена, кодировка символов HTTP-ввода может быть автоматически конвертирована в mbstring.internal_encoding .

Конвертация кодировки символов HTTP-ввода/вывода может конвертировать также двоичные данные. Пользователям предлагается контролировать конвертацию кодировки символов, если бинарные данные используются для ввода/вывода HTTP.

Если enctype для HTML-формы установлен multipart/form-data , mbstring не конвертирует кодировку символов в POST-данных. Если это так, строки должны конвертироваться во внутреннюю кодировку символов.

Нет способов управлять конвертацией символов HTTP-ввода из PHP-скрипта. Отключение конвертации символов HTTP-ввода нужно сделать в php.ini .

Пример 1. Отключение конвертации символов HTTP-ввода в php.ini

При использовании PHP как Apache-модуля можно переопределять PHP ini-установку на уровне Virtual Host в httpd.conf или на уровне директории в .htaccess . Обратитесь к разделу Конфигурация и учебнику Apache.

Есть несколько способов включить конвертацию кодировки символов вывода. Один — это использование php.ini , другой — функция ob_start() с mb_output_handler() как ob_start callback-функция.

Примечание: Для пользователей PHP3-i18n: конвертация вывода mbstring отличается от PHP3-i18n. Кодировка символов конвертируется с использованием буфера вывода.

Пример 2. Установки php.ini

В настоящее время модуль mbstring поддерживает нижеследующие кодировки символов. Кодировка символов может быть специфицирована параметром encoding функций модуля mbstring .

Вот кодировки, поддерживаемые данным расширением PHP:

UCS-4 , UCS-4BE , UCS-4LE , UCS-2 , UCS-2BE , UCS-2LE , UTF-32 , UTF-32BE , UTF-32LE , UCS-2LE , UTF-16 , UTF-16BE , UTF-16LE , UTF-8 , UTF-7 , ASCII , EUC-JP , SJIS , eucJP-win , SJIS-win , ISO-2022-JP , JIS , ISO-8859-1 , ISO-8859-2 , ISO-8859-3 , ISO-8859-4 , ISO-8859-5 , ISO-8859-6 , ISO-8859-7 , ISO-8859-8 , ISO-8859-9 , ISO-8859-10 , ISO-8859-13 , ISO-8859-14 , ISO-8859-15 , byte2be , byte2le , byte4be , byte4le , BASE64 , 7bit , 8bit и UTF7-IMAP .

Вхождение в php.ini , принимающее имя кодировки, принимает также » auto » и » pass «.
mbstring функции, принимающие имя кодировки, принимают и » auto «.

Если » pass » установлено, никакая конвертация кодировки символов не выполняется.

Если » auto » установлено, оно расширяется до » ASCII,JIS,UTF-8,EUC-JP,SJIS «.

Примечание: «Поддерживаемые кодировки символов» не означает, что это работает как внутренний код символа.

Приводим значения по умолчанию, устанавливаемые в php.ini

Директива Значение по умолчанию
mbstring.language «neutral»
mbstring.detect_order NULL
mbstring.http_input «pass»
mbstring.http_output «pass»
mbstring.internal_encoding NULL
mbstring.script_encoding NULL
mbstring.substitute_character NULL
mbstring.func_overload «0»
mbstring.encoding_translation «0»


mbstring.internal_encoding определяет внутреннюю кодировку символов по умолчанию

mbstring.http_input определяет кодировку символов по умолчанию HTTP-ввода

mbstring.http_output определяет кодировку символов по умолчанию HTTP-вывода

mbstring.detect_order определяет порядок определения кодировки символов по умолчанию. См. также mb_detect_order()

mbstring.substitute_character определяет символы для замещения неправильных кодировок символов

Web-браузерам предлагается использовать ту же кодировку при отправку форм. Однако браузеры могут не использовать ту же кодировку символов. См. mb_http_input() для определения кодировки браузера.

Если enctype имеет установленное значение multipart/form-data в HTML-формах, mbstring не конвертирует кодировку символов в POST-данных. Пользователь обязан сделать это в скрипте, если конвертация нужна.

Одновременно браузеры достаточно наворочены, чтобы определять кодировку символов в HTML. charset лучше установить в HTTP-шапке/header. Измените default_charset в соответствии с кодировкой символов.

Пример 4. Установки php.ini

Пример 5. Установки php.ini для пользователей EUC-JP

Пример 6. Установки php.ini для пользователей SJIS

Перегрузка/Overload строковых функций PHP mbstring-функциями с поддержкой многобайтных символов

Поскольку большинство приложений PHP написаны на языках, использующих однобайтную кодировку символов, имеются некоторые трудности при работе с многобайтными строками, в том числе с японскими. Большинство строковых PHP-функций, таких как substr() , не поддерживают многобайтные строки.

Многобайтное расширение (mbstring) имеет строковые РНР-функции с поддержкой многобайтных символов (например, substr() поддерживает mb_substr() ).

Многобайтное расширение (mbstring) также поддерживает ‘перегрузку функций’ для добавления функциональности многобайтных строк без модификации кода. Используя перегрузку функций, некоторые строковые функции PHP будут перегружены многобайтными строковыми функциями. Например, mb_substr() вызывается вместо substr() , если перегрузка функций включена. Перегрузка функций облегчает перенос приложений, поддерживая только однобайтные кодировки для многобайтных приложений.

mbstring.func_overload в php.ini должно иметь некоторое положительное значение для использования перегрузки функций. Это значение должно специфицировать категорию перегружающей функции: 1 включает перегрузку функции mail; 2 — строковые функции, 4 — функции регулярных выражений. Например, если установлена 7, mail, strings и regex функции должны перегружаться. Список перегружаемых функций дан в таблице.

Таблица 1. Перегружаемые функции

значение mbstring.func_overload функция-оригинал перегруженная функция
1 mail() mb_send_mail()
2 strlen() mb_strlen()
2 strpos() mb_strpos()
2 strrpos() mb_strrpos()
2 substr() mb_substr()
4 ereg() mb_ereg()
4 eregi() mb_eregi()
4 ereg_replace() mb_ereg_replace()
4 eregi_replace() mb_eregi_replace()
4 split() mb_split()

Большинство японских символов для своего представления требуют более одного байта на символ. Кроме того, в японском окружении используются разные схемы кодировки. Существуют кодировки EUC-JP, Shift_JIS(SJIS) и ISO-2022-JP(JIS). По мере приобретения популярности Unicode начинает использоваться также UTF-8. при разработке Web-приложений для японской среды важно использовать набор символов, соответствующих текущей задаче — HTTP ввод/вывод, RDBMS и E-mail.

Для хранения символа можно использовать до 6 байтов.

Многобайтный символ обычно в два раза шире однобайтного. Более широкие символы называются «zen-kaku» — что означает «полная ширина», более узкие называются «han-kaku» — что означает «половина ширины». «zen-kaku» имеют обычно фиксированную ширину.

Некоторые кодировки определяют shift(escape)-последовательность для входа/выхода в/из многобайтных строк.

ISO-2022-JP обязан использоваться для SMTP/NNTP.

«i-mode» web-сайт предполагается использовать с SJIS.

Многобайтные кодировки и связанные с ними вопросы очень сложны. Невозможно рассмотреть их здесь достаточно подробно. Дополнительно просмотрите следующие ресурсы.


информация о символах Japanese/Korean/Chinese

источник

Как включить mbstring через htaccess в php7?

Не вводите в заблуждение. Директива mbstring.func_overload прекрасно переопределяется через .htaccess с помощью конструкции, указанной в вопросе. CMS Битрикс, для работы которой необходимо переопределение директивы — тому подтверждение. Большинство Битриксов крутится на shared-хостингах на обычных тарифах.

Вам автор вопроса пишет, что хостер заранее не знает, какое значение директивы потребуется сайту. Соответственно, никаких пресетов на классических тарифах быть не может. Всё разруливается через htaccess

karpo518, Так и было до php 7. Сейчас это не так — читайте документацию, а если ей не верите, попробуйте на практике.

Если вы вставите в .htaccess
php_admin_value mbstring.func_overload 2
Вам apache вернёт ошибку php_admin_value not allowed here
Если
php_value mbstring.func_overload 2
то значение не изменится.

Борис Сёмов, я попробовал на PHP 7.1 код из статьи https://timeweb.com/ru/community/questions/php-7-0. Он практически тот же, что и у автора. Директива переопределилась.

На этот вопрос наткнулся, как раз устанавливая Битрикс) Так что была возможность оперативно проверить

источник

Установка mbstring для php

String literals in the PHP script are encoded with the same encoding that the PHP file was saved with. This is not affected by default_charset or other .ini settings.

Scenario: The default_charset is KOI8-R, and there is a text file «input.txt» containing the string «Это текст для поиска.» in KOI8-R encoding.

A PHP script is written:
// mb_internal_encoding(‘KOI8-R’);

$data = file_get_contents ( ‘input.txt’ );

echo mb_strpos ( $data , $string );

?>
But unfortunately it was saved as UTF-8.

It doesn’t work; mb_strpos() returns false because it can’t find the UTF-8-encoded «текст» inside the KOI8-R-encoded «Это текст для поиска.».

Adjusting the default_charset had no effect. Not even fiddling with mb_internal_encoding could fix it, simply because the strings involved had *different* encodings and without actually changing one of them they just weren’t going to match.

Either re-save the source file as KOI8-R to match the data file, or re-save the data file as UTF-8 to match the source code. Only then will the script properly echo ‘4’.

The documentation is vague, on WHAT precisely the valid «NLS» language strings are that are valid for «mbstring.language».

According to http://php.net/manual/en/function.mb-language.php the values are «Japanese», «ja», «English», «en», or «uni» for UTF-8.
On the other hand, the sample on this current page omits «uni» but introduces «Neutral» as an undocumented option — which is also the default value:

( mb_language () ); // «neutral» (default if not set)
var_dump ( mb_language ( ‘uni’ ) ); // TRUE, valid language string
var_dump ( mb_language () ); // «uni»
var_dump ( mb_language ( ‘neutral’ ) ); // TRUE, valid language string
var_dump ( mb_language () ); // «neutral»
?>

Note that you should better at least set «mbstring.internal_encoding».

echo mb_internal_encoding () . ‘
‘ ;
echo mb_regex_encoding ();

?>

You might be surprised at unexpected values.

mbstring.language Japanese
;mbstring.internal_encoding (commented out showing «no value» in phpinfo() )

These two lines in «php.ini» are the same values as

«mbstring.internal_encoding» defines the default encoding for «mb_» Functions such as «mb_strlen()».

It also defines the same for «mb_ereg_» Functions such as «mb_ereg()» when you don’t set «mb_regex_encoding».

источник

Установка mbstring для php

ну у меня уже есть работающий сервер, как понять есть ли у меня это расширение и если нет как добавить/включить?

Dram добавил 21.09.2010 в 20:23

# yum install php-mbstring
-bash: yum: команда не найдена

Dram добавил 21.09.2010 в 20:32
Вот у меня в пхп ини раздел какой вроде для этого расширения:

Очередной чукча не читатель — чукча писатель?

Где Вы в дебиане yum нашли?

Еще раз, Вы что-то проглядели. В Lenny (и в ранних релизах с незапамятных пор) поддержка mbstring есть в базовых пакетах, вот фрагмент работающего phpinfo:

[HTML]System Linux 4758.ovz63.hc.ru 2.6.18-194.3.1.el5.028stab069.6 #1 SMP Tue Jun 1 01:33:39 MDT 2010 i686
Build Date Mar 14 2010 07:22:08
Server API Apache 2.0 Handler
Virtual Directory Support disabled
Configuration File (php.ini) Path /etc/php5/apache2
Loaded Configuration File /etc/php5/apache2/php.ini
Scan this dir for additional .ini files /etc/php5/apache2/conf.d
additional .ini files parsed /etc/php5/apache2/conf.d/apc.ini, /etc/php5/apache2/conf.d/curl.ini, /etc/php5/apache2/conf.d/eaccelerator.ini, /etc/php5/apache2/conf.d/gd.ini, /etc/php5/apache2/conf.d/mcrypt.ini, /etc/php5/apache2/conf.d/memcache.ini, /etc/php5/apache2/conf.d/mysql.ini, /etc/php5/apache2/conf.d/mysqli.ini, /etc/php5/apache2/conf.d/pdo.ini, /etc/php5/apache2/conf.d/pdo_mysql.ini, /etc/php5/apache2/conf.d/xcache.ini
PHP API 20041225
PHP Extension 20060613
Zend Extension 220060519
Debug Build no
Thread Safety disabled
Zend Memory Manager enabled
IPv6 Support enabled
Registered PHP Streams zip, php, file, data, http, ftp, compress.bzip2, compress.zlib, https, ftps
Registered Stream Socket Transports tcp, udp, unix, udg, ssl, sslv3, sslv2, tls
Registered Stream Filters string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, convert.iconv.*, bzip2.*, zlib.*

Suhosin logo This server is protected with the Suhosin Patch 0.9.6.2
Copyright (c) 2006 Hardened-PHP Project

ничего необычного — обычный phpinfo для ленни, с бессмысленной кучей модулей (зачем вам apc и eaccelerator
и xcache?). mbstring должен быть, если ничего специального не делали для его отключения.

источник

Читайте также:  Установка датчика холостого хода на дэу леганза

Популярные записи

Установка дизельной турбины на бензиновых моторах
Установка кнопок на руль киа церато
Установка водоснабжения scala2 grundfos с гидроаккумулятором
Установка гарант на мазда сх5
Установка люков чугунных тяжелых
Установка задних колодок на камри