[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 メーリングリストの案内