ます’s Blog - どうでもいい記事100選

どうでもいい記事100選

Refine fix for multibyte char hanling inside command names and args(その後)

先日のですが、ありがたい事に助言を頂きました。
助言に従い確認してみると期待した結果になりました。
よかった。。。けど、今後マルチバイトを含める場合はlocaleを気にしないといけない事実は変わらないのか。
ただ、広範囲に影響が出る。。。というのは少なくとも自分の周りには無さそう(注意点という事で)。
Solarisではlocaleに「ja_JP.eucJP」が(まだ)設定できるけど、最近のLinuxでは設定できない事も多くなってきたので、そろそろ文字コードについてはUTF-8にしなさい。。。って事なのかしら。
それにしても、この件については大変勉強になりました。本当にありがとうございました。<(_ _)>

以下は単なる確認なので適当に無視してください。
こっちがSolarisでの結果。

% cd /usr/local/src
% gzip -dc php5.2-200804020230.tar.gz | gtar xf -
% cd php5.2-200804020230
./configure \
--disable-all \
--without-iconv \
--enable-mbstring \
--enable-debug

% make
% cp sapi/cli/php /usr/local/src/php5.2-200804020230-cli

% cd /usr/local/src
% cat ./exec2.php
<?php

  setlocale( LC_ALL, "" );

  var_dump( PHP_VERSION );
  var_dump( PHP_OS );
  var_dump( strftime("%A %e %B %Y", mktime( 0, 0, 0, 12, 22, 1978 ) ) );

  /* encoding is EUC-JP */
  var_dump( escapeshellcmd( "/usr/local/src/あ" ) );
  var_dump( escapeshellarg( "/usr/local/src/あ" ) );

  var_dump( escapeshellcmd( "'/usr/local/src/あ'" ) );
  var_dump( escapeshellarg( "'/usr/local/src/あ'" ) );

  var_dump( escapeshellcmd( '"/usr/local/src/あ"' ) );
  var_dump( escapeshellarg( '"/usr/local/src/あ"' ) );

  var_dump( escapeshellcmd( "/usr/local/あ/src" ) );
  var_dump( escapeshellarg( "/usr/local/あ/src" ) );

  var_dump( escapeshellcmd( "'/usr/local/あ/src'" ) );
  var_dump( escapeshellarg( "'/usr/local/あ/src'" ) );

  var_dump( escapeshellcmd( '"/usr/local/あ/src"' ) );
  var_dump( escapeshellarg( '"/usr/local/あ/src"' ) );

?>

% cat ./exec2-utf8.php
<?php

  setlocale( LC_ALL, "" );

  var_dump( PHP_VERSION );
  var_dump( PHP_OS );
  var_dump( strftime("%A %e %B %Y", mktime( 0, 0, 0, 12, 22, 1978 ) ) );

  /* encoding is UTF-8 */
  var_dump( escapeshellcmd( "/usr/local/src/あ" ) );
  var_dump( escapeshellarg( "/usr/local/src/あ" ) );

  var_dump( escapeshellcmd( "'/usr/local/src/あ'" ) );
  var_dump( escapeshellarg( "'/usr/local/src/あ'" ) );

  var_dump( escapeshellcmd( '"/usr/local/src/あ"' ) );
  var_dump( escapeshellarg( '"/usr/local/src/あ"' ) );

  var_dump( escapeshellcmd( "/usr/local/あ/src" ) );
  var_dump( escapeshellarg( "/usr/local/あ/src" ) );

  var_dump( escapeshellcmd( "'/usr/local/あ/src'" ) );
  var_dump( escapeshellarg( "'/usr/local/あ/src'" ) );

  var_dump( escapeshellcmd( '"/usr/local/あ/src"' ) );
  var_dump( escapeshellarg( '"/usr/local/あ/src"' ) );

?>

% cat ./mblen2.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>

int main( void )
{
 const char *target = "あAいBうCえDおE"; /* encoding is EUC-JP */
 int x, y, size;

 setlocale (LC_ALL, "" );

 size = strlen( target );

 fprintf( stdout, "[DBG]:----------------------------------\n" );
 fprintf( stdout, "[DBG]: size  = %d\n", size );

 for( x = 0; x < size; ++x )
 {
  y = mblen( ( target + x ), ( size - x ) );

  fprintf( stdout, "[DBG]:----------------------------------\n" );
  fprintf( stdout, "[DBG]: now   = %d\n", x );
  fprintf( stdout, "[DBG]: mblen = %d\n", y );

  if( y > 1 )
    {
     x += ( y - 1 );
    }
 }

 return 0;
}

% cat ./mblen2-utf8.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>

int main( void )
{
 const char *target = "あAいBうCえDおE"; /* encoding is UTF-8 */
 int x, y, size;

 setlocale (LC_ALL, "" );

 size = strlen( target );

 fprintf( stdout, "[DBG]:----------------------------------\n" );
 fprintf( stdout, "[DBG]: size  = %d\n", size );

 for( x = 0; x < size; ++x )
 {
  y = mblen( ( target + x ), ( size - x ) );

  fprintf( stdout, "[DBG]:----------------------------------\n" );
  fprintf( stdout, "[DBG]: now   = %d\n", x );
  fprintf( stdout, "[DBG]: mblen = %d\n", y );

  if( y > 1 )
    {
     x += ( y - 1 );
    }
 }

 return 0;
}

% gcc -Wall -o ./mblen2 ./mblen2.c
% gcc -Wall -o ./mblen2-utf8 ./mblen2-utf8.c

% ./php5.2-200804020230-cli ./exec2.php
string(12) "5.2.6RC4-dev"
string(5) "SunOS"
string(23) "Friday 22 December 1978"             /* result encoding is ASCII */
string(17) "/usr/local/src/あ"
string(19) "'/usr/local/src/あ'"
string(19) "'/usr/local/src/あ'"
string(27) "''\''/usr/local/src/あ'\'''"
string(19) ""/usr/local/src/あ""
string(21) "'"/usr/local/src/あ"'"
string(17) "/usr/local/あ/src"
string(19) "'/usr/local/あ/src'"
string(19) "'/usr/local/あ/src'"
string(27) "''\''/usr/local/あ/src'\'''"
string(19) ""/usr/local/あ/src""
string(21) "'"/usr/local/あ/src"'"

% ./php5.2-200804020230-cli ./exec2-utf8.php
string(12) "5.2.6RC4-dev"
string(5) "SunOS"
string(23) "Friday 22 December 1978"             /* result encoding is ASCII */
string(18) "/usr/local/src/あ"
string(20) "'/usr/local/src/あ'"
string(20) "'/usr/local/src/あ'"
string(28) "''\''/usr/local/src/あ'\'''"
string(20) ""/usr/local/src/あ""
string(22) "'"/usr/local/src/あ"'"
string(18) "/usr/local/あ/src"
string(20) "'/usr/local/あ/src'"
string(20) "'/usr/local/あ/src'"
string(28) "''\''/usr/local/あ/src'\'''"
string(20) ""/usr/local/あ/src""
string(22) "'"/usr/local/あ/src"'"

% ./mblen2
[DBG]:----------------------------------
[DBG]: size  = 15
[DBG]:----------------------------------
[DBG]: now   = 0
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 1
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 2
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 3
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 4
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 5
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 6
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 7
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 8
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 9
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 10
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 11
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 12
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 13
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 14
[DBG]: mblen = 1

% ./mblen2-utf8
[DBG]:----------------------------------
[DBG]: size  = 20
[DBG]:----------------------------------
[DBG]: now   = 0
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 1
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 2
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 3
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 4
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 5
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 6
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 7
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 8
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 9
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 10
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 11
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 12
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 13
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 14
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 15
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 16
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 17
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 18
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 19
[DBG]: mblen = 1

% locale
LANG=C
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=C

% setenv LC_ALL ja_JP.eucJP
% ./php5.2-200804020230-cli ./exec2.php
string(12) "5.2.6RC4-dev"
string(5) "SunOS"
string(19) "金曜日 22 12月 1978"                 /* result encoding is EUC-JP */
string(17) "/usr/local/src/あ"
string(19) "'/usr/local/src/あ'"
string(19) "'/usr/local/src/あ'"
string(27) "''\''/usr/local/src/あ'\'''"
string(19) ""/usr/local/src/あ""
string(21) "'"/usr/local/src/あ"'"
string(17) "/usr/local/あ/src"
string(19) "'/usr/local/あ/src'"
string(19) "'/usr/local/あ/src'"
string(27) "''\''/usr/local/あ/src'\'''"
string(19) ""/usr/local/あ/src""
string(21) "'"/usr/local/あ/src"'"

% ./php5.2-200804020230-cli ./exec2-utf8.php
string(12) "5.2.6RC4-dev"
string(5) "SunOS"
string(19) "金曜日 22 12月 1978"                 /* result encoding is EUC-JP */
string(17) "/usr/local/src/"
string(19) "'/usr/local/src/'"
string(19) "'/usr/local/src/'"
string(27) "''\''/usr/local/src/'\'''"
string(19) ""/usr/local/src/""
string(21) "'"/usr/local/src/"'"
string(17) "/usr/local//src"
string(19) "'/usr/local//src'"
string(19) "'/usr/local//src'"
string(27) "''\''/usr/local//src'\'''"
string(19) ""/usr/local//src""
string(21) "'"/usr/local//src"'"

% ./mblen2
[DBG]:----------------------------------
[DBG]: size  = 15
[DBG]:----------------------------------
[DBG]: now   = 0
[DBG]: mblen = 2
[DBG]:----------------------------------
[DBG]: now   = 2
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 3
[DBG]: mblen = 2
[DBG]:----------------------------------
[DBG]: now   = 5
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 6
[DBG]: mblen = 2
[DBG]:----------------------------------
[DBG]: now   = 8
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 9
[DBG]: mblen = 2
[DBG]:----------------------------------
[DBG]: now   = 11
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 12
[DBG]: mblen = 2
[DBG]:----------------------------------
[DBG]: now   = 14
[DBG]: mblen = 1

% ./mblen2-utf8
[DBG]:----------------------------------
[DBG]: size  = 20
[DBG]:----------------------------------
[DBG]: now   = 0
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 1
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 2
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 3
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 4
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 5
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 6
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 7
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 8
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 9
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 10
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 11
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 12
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 13
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 14
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 15
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 16
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 17
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 18
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 19
[DBG]: mblen = 1

% locale | grep LC_ALL
LC_ALL=ja_JP.eucJP

% setenv LC_ALL ja_JP.UTF-8
% ./php5.2-200804020230-cli ./exec2.php
string(12) "5.2.6RC4-dev"
string(5) "SunOS"
string(23) "金曜日 22 12月 1978"                 /* result encoding is UTF-8 */
string(15) "/usr/local/src/"
string(17) "'/usr/local/src/'"
string(17) "'/usr/local/src/'"
string(25) "''\''/usr/local/src/'\'''"
string(17) ""/usr/local/src/""
string(19) "'"/usr/local/src/"'"
string(15) "/usr/local//src"
string(17) "'/usr/local//src'"
string(17) "'/usr/local//src'"
string(25) "''\''/usr/local//src'\'''"
string(17) ""/usr/local//src""
string(19) "'"/usr/local//src"'"

% ./php5.2-200804020230-cli ./exec2-utf8.php
string(12) "5.2.6RC4-dev"
string(5) "SunOS"
string(23) "金曜日 22 12月 1978"                 /* result encoding is UTF-8 */
string(18) "/usr/local/src/あ"
string(20) "'/usr/local/src/あ'"
string(20) "'/usr/local/src/あ'"
string(28) "''\''/usr/local/src/あ'\'''"
string(20) ""/usr/local/src/あ""
string(22) "'"/usr/local/src/あ"'"
string(18) "/usr/local/あ/src"
string(20) "'/usr/local/あ/src'"
string(20) "'/usr/local/あ/src'"
string(28) "''\''/usr/local/あ/src'\'''"
string(20) ""/usr/local/あ/src""
string(22) "'"/usr/local/あ/src"'"

% ./mblen2
[DBG]:----------------------------------
[DBG]: size  = 15
[DBG]:----------------------------------
[DBG]: now   = 0
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 1
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 2
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 3
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 4
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 5
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 6
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 7
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 8
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 9
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 10
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 11
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 12
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 13
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 14
[DBG]: mblen = 1

% ./mblen2-utf8
[DBG]:----------------------------------
[DBG]: size  = 20
[DBG]:----------------------------------
[DBG]: now   = 0
[DBG]: mblen = 3
[DBG]:----------------------------------
[DBG]: now   = 3
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 4
[DBG]: mblen = 3
[DBG]:----------------------------------
[DBG]: now   = 7
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 8
[DBG]: mblen = 3
[DBG]:----------------------------------
[DBG]: now   = 11
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 12
[DBG]: mblen = 3
[DBG]:----------------------------------
[DBG]: now   = 15
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 16
[DBG]: mblen = 3
[DBG]:----------------------------------
[DBG]: now   = 19
[DBG]: mblen = 1

% locale | grep LC_ALL
LC_ALL=ja_JP.UTF-8

% uname -a
SunOS **** 5.10 Generic_127111-05 sun4v sparc SUNW,Sun-Fire-T200 Solaris

こっちがLinuxでの結果。
localeに「ja_JP.eucJP」が設定できなかったので「ja_JP.UTF-8」のみの確認です。

% cd /usr/local/src
% gzip -dc php5.2-200804020230.tar.gz | gtar xf -
% cd php5.2-200804020230
./configure \
--disable-all \
--without-iconv \
--enable-mbstring \
--enable-debug

% make
% cp sapi/cli/php /usr/local/src/php5.2-200804020230-cli

% cd /usr/local/src
% cat ./exec2-utf8.php
<?php

  setlocale( LC_ALL, "" );

  var_dump( PHP_VERSION );
  var_dump( PHP_OS );
  var_dump( strftime("%A %e %B %Y", mktime( 0, 0, 0, 12, 22, 1978 ) ) );

  /* encoding is UTF-8 */
  var_dump( escapeshellcmd( "/usr/local/src/あ" ) );
  var_dump( escapeshellarg( "/usr/local/src/あ" ) );

  var_dump( escapeshellcmd( "'/usr/local/src/あ'" ) );
  var_dump( escapeshellarg( "'/usr/local/src/あ'" ) );

  var_dump( escapeshellcmd( '"/usr/local/src/あ"' ) );
  var_dump( escapeshellarg( '"/usr/local/src/あ"' ) );

  var_dump( escapeshellcmd( "/usr/local/あ/src" ) );
  var_dump( escapeshellarg( "/usr/local/あ/src" ) );

  var_dump( escapeshellcmd( "'/usr/local/あ/src'" ) );
  var_dump( escapeshellarg( "'/usr/local/あ/src'" ) );

  var_dump( escapeshellcmd( '"/usr/local/あ/src"' ) );
  var_dump( escapeshellarg( '"/usr/local/あ/src"' ) );

?>

% cat ./mblen2-utf8.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>

int main( void )
{
 const char *target = "あAいBうCえDおE"; /* encoding is UTF-8 */
 int x, y, size;

 setlocale (LC_ALL, "" );

 size = strlen( target );

 fprintf( stdout, "[DBG]:----------------------------------\n" );
 fprintf( stdout, "[DBG]: size  = %d\n", size );

 for( x = 0; x < size; ++x )
 {
  y = mblen( ( target + x ), ( size - x ) );

  fprintf( stdout, "[DBG]:----------------------------------\n" );
  fprintf( stdout, "[DBG]: now   = %d\n", x );
  fprintf( stdout, "[DBG]: mblen = %d\n", y );

  if( y > 1 )
    {
     x += ( y - 1 );
    }
 }

 return 0;
}

% gcc -Wall -o ./mblen2-utf8 ./mblen2-utf8.c

% ./php5.2-200804020230-cli ./exec2-utf8.php
string(12) "5.2.6RC4-dev"
string(5) "Linux"
string(23) "Friday 22 December 1978"             /* result encoding is ASCII */
string(15) "/usr/local/src/"
string(17) "'/usr/local/src/'"
string(17) "'/usr/local/src/'"
string(25) "''\''/usr/local/src/'\'''"
string(17) ""/usr/local/src/""
string(19) "'"/usr/local/src/"'"
string(15) "/usr/local//src"
string(17) "'/usr/local//src'"
string(17) "'/usr/local//src'"
string(25) "''\''/usr/local//src'\'''"
string(17) ""/usr/local//src""
string(19) "'"/usr/local//src"'"

% ./mblen2-utf8
[DBG]:----------------------------------
[DBG]: size  = 20
[DBG]:----------------------------------
[DBG]: now   = 0
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 1
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 2
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 3
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 4
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 5
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 6
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 7
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 8
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 9
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 10
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 11
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 12
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 13
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 14
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 15
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 16
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 17
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 18
[DBG]: mblen = -1
[DBG]:----------------------------------
[DBG]: now   = 19
[DBG]: mblen = 1

% locale
LANG=C
LANGUAGE=C
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C

% setenv LC_ALL ja_JP.UTF-8
% ./php5.2-200804020230-cli ./exec2-utf8.php
string(12) "5.2.6RC4-dev"
string(5) "Linux"
string(23) "金曜日 22 12月 1978"                 /* result encoding is UTF-8 */
string(18) "/usr/local/src/あ"
string(20) "'/usr/local/src/あ'"
string(20) "'/usr/local/src/あ'"
string(28) "''\''/usr/local/src/あ'\'''"
string(20) ""/usr/local/src/あ""
string(22) "'"/usr/local/src/あ"'"
string(18) "/usr/local/あ/src"
string(20) "'/usr/local/あ/src'"
string(20) "'/usr/local/あ/src'"
string(28) "''\''/usr/local/あ/src'\'''"
string(20) ""/usr/local/あ/src""
string(22) "'"/usr/local/あ/src"'"

% ./mblen2-utf8
[DBG]:----------------------------------
[DBG]: size  = 20
[DBG]:----------------------------------
[DBG]: now   = 0
[DBG]: mblen = 3
[DBG]:----------------------------------
[DBG]: now   = 3
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 4
[DBG]: mblen = 3
[DBG]:----------------------------------
[DBG]: now   = 7
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 8
[DBG]: mblen = 3
[DBG]:----------------------------------
[DBG]: now   = 11
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 12
[DBG]: mblen = 3
[DBG]:----------------------------------
[DBG]: now   = 15
[DBG]: mblen = 1
[DBG]:----------------------------------
[DBG]: now   = 16
[DBG]: mblen = 3
[DBG]:----------------------------------
[DBG]: now   = 19
[DBG]: mblen = 1

% locale | grep LC_ALL
LC_ALL=ja_JP.UTF-8

% uname -a
Linux **** 2.6.18-6-686 #1 SMP Sun Feb 10 22:11:31 UTC 2008 i686 GNU/Linux