[PHP-dev 1166] [PATCH]mbstring関数内のエンコーディング名の実体を得る関数
Seiji Masugata
s.masugata @ digicom.dnp.co.jp
2005年 8月 8日 (月) 10:48:30 JST
こんにちわ、桝形です。
よろしければ、以下のタコさんパッチを本体に適用して頂けると嬉しいです。
よろしくお願いします。
ここで説明する事でも無いのですが、mbstring関数内のエンコーディング名は
色んな名前があります。ですが、実体は一つだけです(他は全てエイリアス)。
この関数は、エイリアスになっている文字コード名から実体の文字コード名を
返します。
-----------------------------------------------------------------------
--- php-4.4.0,orig/ext/mbstring/mbstring.h 2005-08-01 11:30:02.000000000 +0900
+++ php-4.4.0/ext/mbstring/mbstring.h 2005-08-01 11:30:02.000000000 +0900
@@ -92,6 +92,7 @@
/* php function registration */
PHP_FUNCTION(mb_language);
PHP_FUNCTION(mb_internal_encoding);
+PHP_FUNCTION(mb_get_encoding_name);
PHP_FUNCTION(mb_http_input);
PHP_FUNCTION(mb_http_output);
PHP_FUNCTION(mb_detect_order);
--- php-4.4.0,orig/ext/mbstring/mbstring.c 2005-08-01 11:30:02.000000000 +0900
+++ php-4.4.0/ext/mbstring/mbstring.c 2005-08-01 11:30:02.000000000 +0900
@@ -227,6 +227,7 @@
PHP_FE(mb_strtolower, NULL)
PHP_FE(mb_language, NULL)
PHP_FE(mb_internal_encoding, NULL)
+ PHP_FE(mb_get_encoding_name, NULL)
PHP_FE(mb_http_input, NULL)
PHP_FE(mb_http_output, NULL)
PHP_FE(mb_detect_order, NULL)
@@ -1212,6 +1213,39 @@
}
/* }}} */
+/* {{{ proto string mb_get_encoding_name([string encoding])
+ Gets encoding name as a string */
+PHP_FUNCTION(mb_get_encoding_name)
+{
+ pval **arg1;
+ char *name;
+ enum mbfl_no_encoding no_encoding;
+
+ if (ZEND_NUM_ARGS() == 1 && zend_get_parameters_ex(1, &arg1) != FAILURE) {
+ convert_to_string_ex(arg1);
+ if( Z_STRLEN_PP(arg1) > 0 ){
+ no_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(arg1));
+ if (no_encoding == mbfl_no_encoding_invalid) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", Z_STRVAL_PP(arg1));
+ RETURN_FALSE;
+ } else {
+ name = (char *)mbfl_no_encoding2name(no_encoding);
+ if (name != NULL) {
+ RETURN_STRING(name, 1);
+ } else {
+ RETURN_FALSE;
+ }
+ }
+ } else{
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty encoding");
+ RETURN_FALSE;
+ }
+ } else {
+ WRONG_PARAM_COUNT;
+ }
+}
+/* }}} */
+
/* {{{ proto mixed mb_http_input([string type])
Returns the input encoding */
PHP_FUNCTION(mb_http_input)
-----------------------------------------------------------------------
mb_get_encoding_name.php:
------------------------------------------------------------------------
<?php
var_dump( mb_get_encoding_name( ) );
var_dump( mb_get_encoding_name( "" ) );
var_dump( mb_get_encoding_name( "hoge" ) );
var_dump( mb_get_encoding_name( "EUC" ) );
var_dump( mb_get_encoding_name( "EUC_JP" ) );
var_dump( mb_get_encoding_name( "x-euc-jp" ) );
var_dump( mb_get_encoding_name( "eucJP" ) );
var_dump( mb_get_encoding_name( "EUC-JP" ) );
var_dump( mb_get_encoding_name( "eucJP-open" ) );
var_dump( mb_get_encoding_name( "eucJP-win" ) );
var_dump( mb_get_encoding_name( "SHIFT_JIS" ) );
var_dump( mb_get_encoding_name( "SHIFT-JIS" ) );
var_dump( mb_get_encoding_name( "x-sjis" ) );
var_dump( mb_get_encoding_name( "SJIS" ) );
var_dump( mb_get_encoding_name( "SJIS-open" ) );
var_dump( mb_get_encoding_name( "CP932" ) );
var_dump( mb_get_encoding_name( "Windows-31J" ) );
var_dump( mb_get_encoding_name( "MS_Kanji" ) );
var_dump( mb_get_encoding_name( "SJIS-win" ) );
?>
------------------------------------------------------------------------
result:
------------------------------------------------------------------------
Warning: Wrong parameter count for mb_get_encoding_name() in
/home/masugata/mb.php on line 2
NULL
Warning: mb_get_encoding_name(): Empty encoding in /home/masugata/mb.php on line 3
bool(false)
Warning: mb_get_encoding_name(): Unknown encoding "hoge" in /home/masugata/mb.php on line 4
bool(false)
string(6) "EUC-JP" <= "EUC"
string(6) "EUC-JP" <= "EUC_JP"
string(6) "EUC-JP" <= "x-euc-jp"
string(6) "EUC-JP" <= "eucJP"
string(6) "EUC-JP" <= "EUC-JP"
string(9) "eucJP-win" <= "eucJP-open"
string(9) "eucJP-win" <= "eucJP-win"
string(4) "SJIS" <= "SHIFT_JIS"
string(4) "SJIS" <= "SHIFT-JIS"
string(4) "SJIS" <= "x-sjis"
string(4) "SJIS" <= "SJIS"
string(8) "SJIS-win" <= "SJIS-open"
string(8) "SJIS-win" <= "CP932"
string(8) "SJIS-win" <= "Windows-31J"
string(8) "SJIS-win" <= "MS_Kanji"
string(8) "SJIS-win" <= "SJIS-win"
------------------------------------------------------------------------
--
Seiji Masugata <s.masugata @ digicom.dnp.co.jp>
PHP-dev メーリングリストの案内