downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

PHP の文字エンコーディングに関する要件> <サポートされる文字エンコーディング
[edit] Last updated: Fri, 10 Feb 2012

view this page in

関数のオーバーロード機能

PHP アプリケーションの多くは、英語等のシングルバイトの言語用に設計されており、 日本語を含むマルチバイト文字列を扱う場合には問題を生じる場合があります。 substr() 等の PHP の文字列関数の多くは、 マルチバイト文字列に対応していません。

mbstring では、 対応するマルチバイト文字対応版の関数で既存の PHP 関数を オーバーロードする機能をサポートします。関数のオーバーロードを行うと、例えば substr() を PHP スクリプトでコールした場合に、 mb_substr() が代わりにコールされるようになります。 これにより、マルチバイト文字に対応しないアプリケーションの移植が容易となります。

関数オーバーロードを使用するには、php.inimbstring.func_overload ディレクティブに正の値を指定します。 これは、オーバーロードされる関数の種類を指定するビットマスクの組み合わせとなります。 mail() 関数をオーバーロードするには 1 を指定します。 2 は文字列関数、4 は正規表現関数を表します。つまり、例えば 7 を指定すると、メール関数、文字列関数および正規表現関数が オーバーロードされることになります。オーバーロードされる関数の一覧を以下に示します。

オーバーロードされる関数
mbstring.func_overload の値 元の関数 オーバーロードする関数
1 mail() mb_send_mail()
2 strlen() mb_strlen()
2 strpos() mb_strpos()
2 strrpos() mb_strrpos()
2 substr() mb_substr()
2 strtolower() mb_strtolower()
2 strtoupper() mb_strtoupper()
2 stripos() mb_stripos()
2 strripos() mb_strripos()
2 strstr() mb_strstr()
2 stristr() mb_stristr()
2 strrchr() mb_strrchr()
2 substr_count() mb_substr_count()
4 ereg() mb_ereg()
4 eregi() mb_eregi()
4 ereg_replace() mb_ereg_replace()
4 eregi_replace() mb_eregi_replace()
4 split() mb_split()

注意:

ディレクトリ単位の設定でこのオプションを使用することは推奨されません。 これは、実際の運用環境ではまだ安定性が確認されておらず、 予期しない結果をもたらす可能性があるためです。



add a note add a note User Contributed Notes 関数のオーバーロード機能
zeddix at freenet dot de 15-May-2011 07:43
Here a small helpful function to convert a php file for multi byte use:
<?php
    $filename
= 'header.php'; // File name
   
   
$search[] = 'mail(';    $replace[] = 'mb_send_mail(';
   
$search[] = 'strlen(';    $replace[] = 'mb_strlen(';
   
$search[] = 'strpos(';    $replace[] = 'mb_strpos(';
   
$search[] = 'strrpos(';    $replace[] = 'mb_strrpos(';
   
$search[] = 'substr(';    $replace[] = 'mb_substr(';
   
$search[] = 'strtolower(';    $replace[] = 'mb_strtolower(';
   
$search[] = 'strtoupper(';    $replace[] = 'mb_strtoupper(';
   
$search[] = 'stripos(';    $replace[] = 'mb_stripos(';
   
$search[] = 'strstr(';    $replace[] = 'mb_strstr(';
   
$search[] = 'stristr(';    $replace[] = 'mb_stristr(';
   
$search[] = 'strrchr(';    $replace[] = 'mb_strrchr(';
   
$search[] = 'substr_count(';    $replace[] = 'mb_substr_count(';
   
$search[] = 'ereg(';    $replace[] = 'mb_ereg(';
   
$search[] = 'eregi(';    $replace[] = 'mb_eregi(';
   
$search[] = 'ereg_replace(';    $replace[] = 'mb_ereg_replace(';
   
$search[] = 'eregi_replace(';    $replace[] = 'mb_eregi_replace(';
   
$search[] = 'split(';    $replace[] = 'mb_split(';
   
$file = file_get_contents($filename);
   
$file = str_replace($search,$replace,$file);
   
file_put_contents($filename,$file);
?>
Oliver Baltz 26-Jul-2010 11:25
In case you need to (de)activate the overloading for a specific directory, try setting an appropriate php_admin_value in your httpd.conf, e.g.

<Directory ...>
   ...
   php_admin_value mbstring.func_overload 7
</Directory>

I'm not 100% sure if one can rely on that, but it seems to work for me.
andrew 21-May-2009 11:38
It seems in php 5.2.7 - 5.2.9 under windows mbstring overloading not working in .htaccess files. Apache v.2.2.
Works only in php.ini, this is not convinient in some situations.

 
show source | credits | stats | sitemap | contact | advertising | mirror sites