
mbstring¤ò»È¤¦¾å¤ÇÃí°Õ¤¹¤ë¤³¤È †php.ini¤Çmbstring¤ÎÀßÄê¤ò¹Ô¤ï¤Ê¤¤ †Â¿¤¯¤Î½ñÀҤǤÏmbstring¤ÎÀßÄê¤Ïphp.ini¤Ç¹Ô¤¦¤è¤¦¤ËÁ¦¤á¤Æ¤¤¤Þ¤¹¡¥ ¤·¤«¤·É®¼Ô¤Ï¤Þ¤Ã¤¿¤¯¤½¤ì¤òÁ¦¤á¤Þ¤»¤ó¡¥ Íýͳ¤Ï²¼µ¤ÎÄ̤ê¤Ç¤¹¡¥
php.ini¤Çmbstring¤ÎÀßÄê¤ò¤·¤Ê¤±¤ì¤Ð¼Â¸½¤Ç¤¤Ê¤¤¤³¤È¤Ï¤Û¤È¤ó¤ÉHTTPÆþÎϤËÂФ·¤Æ¤Î¼«Æ°Ê¸»ú¥¨¥ó¥³¡¼¥ÉÊÑ´¹¤Î¤ß¤Ç¤¹¡¥ ¤½¤ì¤â²¼µ¤Î¤è¤¦¤ËÉ®¼Ô¤ÏÁ¦¤á¤Ê¤¤¤Ç¤¹¤·¡¤¤Ê¤¯¤Æ¤â¼ÂÁõ¤Ç¤¤ë¤Î¤Ç¡¤·ë¶Éphp.ini¤ÇÀßÄꤹ¤ëɬÍפϤʤ¤¤Î¤Ç¤¹¡¥ ʸ»ú¥¨¥ó¥³¡¼¥É¤Î¼«Æ°ÊÑ´¹¤ò»È¤ï¤Ê¤¤ †php.ini¤Ç¤¤¤¦¡Ömbstring.http_input¡×¤Ê¤É¡¤¤¤¤ï¤æ¤ë¥¦¥§¥Ö¾å¤Î¥Õ¥©¡¼¥à¤ÇÆþÎϤµ¤ì¤¿Ãͤμ«Æ°ÊÑ´¹¤äHTML½ÐÎϤμ«Æ°ÊÑ´¹¤ÏÈó¾ï¤ËÊØÍø¤Ë¸«¤¨¤ëµ¡Ç½¤Ç¤¹¡¥ ¤·¤«¤·¤³¤ì¤é¤Ï»ÈÍѤ¹¤ë¤Ù¤¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡¥Íýͳ¤Ï¡Ömbstring.http_input¤Ï»ö¼Â¾åphp.ini¤ä.htaccess¤Ê¤É¤Ç¤·¤«ÀßÄê¤Ç¤¤Ê¤¤¡×¤«¤é¤Ç¤¹¡¥ mbstring.http_input¤Ï¤½¤ÎÌÜŪ¾åPHP¥¹¥¯¥ê¥×¥È¤¬¼Â¹Ô¤µ¤ì¤ëÁ°¤Ç¤Î¤ßÀßÄ꤬¤Ç¤¤Þ¤¹¡ÊPHP¥¹¥¯¥ê¥×¥È¼Â¹Ô»þ¤Ë¤ÏÀßÄꤵ¤ì¤¿ÊÑ´¹¤¬´û¤Ë¹Ô¤ï¤ì¤¿¤¢¤È¤Ç¤¹¤«¤é¡Ë ¤·¤«¤·¤É¤¦¤·¤Æ¤âʸ»ú¥¨¥ó¥³¡¼¥É¤òÊѹ¹¤·¤ÆÍߤ·¤¯¤Ê¤¤¾ì¹ç¤Ç¤âPHP¥¹¥¯¥ê¥×¥È¤ÇÀ©¸æ¤Ç¤¤Ê¤¯¤Ê¤ë¤¿¤á¡¤»ÈÍѤ¹¤ë¤Ù¤¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡¥ ¤Þ¤¿¡¤Ê¸»ú²½¤±¤Ê¤É¤¬È¯À¸¤·¤¿¾ì¹ç¡¤¸¶°øÄɵá¤ò¤¹¤ë¤³¤È¤¬º¤Æñ¤Ë¤Ê¤ê¤Þ¤¹¡¥ ¤½¤â¤½¤â¼«Æ°ÊÑ´¹¤ÏɬÍפʤΤǤ·¤ç¤¦¤«? »ä¤Ï´ðËÜŪ¤Ë¡ÖɬÍפʤ¤¡×¤È¹Í¤¨¤Þ¤¹¡¥ Íýͳ¤Ï¡Ö¼«Ê¬¤Ç¤É¤¦¤¤¤¦Ê¸»ú¥¨¥ó¥³¡¼¥É¤¬ÆþÎϤµ¤ì¤ë¤«¤Û¤È¤ó¤É¤Î¾ì¹çÃΤäƤ¤¤ë¤Ï¤º¡×¤À¤«¤é¤Ç¤¹¡¥
´ðËÜŪ¤Ë¤³¤ì¤À¤±¤Î¤³¤È¤Ç¤¹¡¥ ¥Õ¥©¡¼¥à¤«¤éÁ÷¿®¤µ¤ì¤¿Ê¸»úÎó¤Îʸ»ú¥¨¥ó¥³¡¼¥É¤òÄ´¤Ù¤ë †¥Õ¥©¡¼¥à¤«¤éÁ÷¿®¤µ¤ì¤¿Ê¸»úÎó¤Îʸ»ú±ß¥³¡¼¥É¤òÄ´¤Ù¤ë¤Ë¤Ï$_POST¤ÎÃͤòmb_detect_order()¤ÇÄ´¤Ù¤ëÊýË¡¤¬¤¢¤ê¤Þ¤¹¡¥ ¤½¤Î¾¥À¥ß¡¼Ê¸»úÎó¤òÍѰդ·¡¤ÁÛÄê¤Ç¤¤ëʸ»ú¥¨¥ó¥³¡¼¥É¤Î¼ïÎà¤À¤±ÆþÎÏʸ»úÎó¤òÊÑ´¹¤·¤Æ¤ß¤ë¤È¤¤¤Ã¤¿ÊýË¡¤¬¤¢¤ê¤Þ¤¹¡¥ ʸ»ú¥¨¥ó¥³¡¼¥É¤òÄ´¤Ù¤ëÎã
// ʸ»ú¥¨¥ó¥³¡¼¥É¼±ÊÌÍѤËhidden¤Ê¤É¤Çphrase¤Ë½½Ê¬¤ÊŤµ¤Î¥À¥ß¡¼Ê¸»úÎó¤òÅϤ·¤Þ¤¹
// ¤³¤Î¥µ¥ó¥×¥ë¤Ç¤Ï$phrase¤¬¶õʸ»ú¤À¤Ã¤¿¾ì¹ç¡¢Ä´¤Ù¤è¤¦¤¬¤¢¤ê¤Þ¤»¤ó¤Î¤ÇÃí¤·¤Æ¤¯¤À¤µ¤¤(¶ì¾Ð
$detect_charset = "";
$phrase = empty( $_POST[ "phrase"]) == TRUE? "": $_POST[ "phrase"];
if ( $phrase != "") {
$charsets = array( "UTF-8", "EUC-JP", "Shift_JIS", "ISO-2022-JP");
foreach ( $charsets as $charset) {
// Ʊ¤¸Ê¸»ú¥¨¥ó¥³¡¼¥É¤Ç¥À¥ß¡¼ÊÑ´¹¤ò¤·¤Æ$phrase¤¬²õ¤ì¤¿¤é
// Àµ¤·¤¯¤Ê¤¤Ê¸»ú¥¨¥ó¥³¡¼¥É
if ( $phrase == mb_convert_encoding( $phrase, $charset, $charset)) {
// ¥Ó¥ó¥´
$detect_charset = $charset;
break;
}
}
}
¤³¤ÎÎã¤Ï¥Õ¥©¡¼¥à¤ÇÁ÷¿®¤¹¤ëʸ»úÎó¤Ëʸ»ú¥³¡¼¥ÉȽÄêÍѤÎʸ»úÎó¤òÆþ¤ì¤Æ¤ª¤¡¤¤½¤ì¤òÄ´¤Ù¤ë¤È¤¤¤Ã¤¿»È¤¤Êý¤Ë¤Ê¤ê¤Þ¤¹¤¬¡¤ ¡Ö³°Éô¥µ¥¤¥È¤ÎHTML¤ò¼èÆÀ¤·¡¤Ê¸»ú¥¨¥ó¥³¡¼¥É¤ò¼èÆÀ¤·¤¿¤¤¡×¤È¤¤¤Ã¤¿¾ì¹ç¡¤$phrase¤Ï¼èÆÀ¤·¤¿HTML¤ò´Ý¤´¤ÈÆþ¤ì¤ë¤È¤¤¤¦ÊýË¡¤â¤¢¤ë¤Ç¤·¤ç¤¦¡¥ XML¤Îʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤òÄ´¤Ù¤ë †XML¤Ï¥Ç¥Õ¥©¥ë¥È¤ÏUTF-8¤Ç¤¹¤¬¡¤RSS¤Ê¤É¤Þ¤ì¤ËUTF-8°Ê³°¤Îʸ»ú¥¨¥ó¥³¡¼¥É¤¬»ÈÍѤµ¤ì¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡¥ XML¤â¤¿¤À¤Î¥Æ¥¥¹¥È¤Ê¤Î¤Ç¡¤¾åµ¤Î¤è¤¦¤Ëmb_convert_encoding()¤ÇÊѲ½¤¬¤Ê¤¤Ê¸»ú¥¨¥ó¥³¡¼¥É¤òÄ´¤Ù¤ëÊýË¡¤â¤¢¤ê¤Þ¤¹¤¬¡¤ ¡Ö<?xml encoding="<CHARSET>"?>¡×¤È¤·¤ÆXMLÀë¸À¤ÇÌÀ¼¨Åª¤Ë»ØÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡¥ ¤³¤Î¾ì¹çÀµµ¬É½¸½¤Çʸ»ú¥¨¥ó¥³¡¼¥É¤ò¼èÆÀ¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡¥ ¡ÖXMLÀë¸À¤«¤é¡ÖUTF-8¡×¤ò¼èÆÀ¤¹¤ë¼ÂÁõÎã
$ echo '<?xml encoding="UTF-8" ?>' | \
php -r '
$string = file_get_contents( "php://stdin");
var_dump( preg_match( "/encoding=[\"]?[^\" \t>]+/", $string, $matches));
var_dump( $matches);'
int(1)
array(1) {
[0]=>
string(14) "encoding=UTF-8"
}
mbstring¤Èmbregex¤ÏÊÌʪ¤È¤¤¤¦¤³¤È¤ò°Õ¼±¤¹¤ë †ÆâÉô¥¨¥ó¥³¡¼¥É¤ÎÏà †libmbfl¤Èoniguruma¤ÏÁ°½Ò¤ÎÄ̤êÊÌ¡¹¤Î¥é¥¤¥Ö¥é¥ê¤òÅý¹ç¤·¡¤mbstring³ÈÄ¥¥â¥¸¥å¡¼¥ë¤È¤¤¤¦°·¤¤¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡¥ ¤·¤«¤·ÆâÉôŪ¤Ë¤Ï¤¢¤Þ¤êÅý¹ç¤µ¤ì¤Æ¤¤¤Ê¤¤¤Î¤Ç¡¤Î㤨¤ÐÆâÉô¥¨¥ó¥³¡¼¥É¤ÎÀßÄê¤ÏPHP¥¹¥¯¥ê¥×¥È¤Ç¹Ô¤¦¾ì¹ç¡¤¤½¤ì¤¾¤ìÊÌ¡¹¤Ë¹Ô¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡¥ ÆâÉô¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ÎÀßÄê
mb_internal_encoding( "UTF-8"); mb_regex_encoding( "UTF-8"); ;Ã̤ˤʤê¤Þ¤¹¤¬¡¤php.ini¤Çmbstring.internal_encoding¤ò»ØÄꤷ¤¿¾ì¹ç¤Ïξ¥é¥¤¥Ö¥é¥ê¤ÎÆâÉô¥¨¥ó¥³¡¼¥É¤òƱ»þ¤ËÀßÄꤷ¤Æ¤¯¤ì¤ë¤è¤¦¤Ç¤¹¡¥ Âбþ¥¨¥ó¥³¡¼¥É¤ÎÏà †libmbfl¤Èoniguruma¤Ç¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ëʸ»ú¥¨¥ó¥³¡¼¥É¤ËÂ礤ʺ¹¤¬¤¢¤ê¤Þ¤¹¡¥ ÆüËܸ줬°·¤¨¤ëʸ»ú¥¨¥ó¥³¡¼¥É¤È¤·¤Æ¤Ï²¼µ¤¬libmbfl¤Ç¤Î¤ß°·¤¨¤ëʸ»ú¥¨¥ó¥³¡¼¥É¤Ç¤¹¡¥
¤³¤ÎÃæ¤Ç°ìÈÖÂ礤ʰ㤤¤ÏISO-2022-JP¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¤«¤É¤¦¤«¤Ç¤·¤ç¤¦¡¥ ISO-2022-JP¤Ï¤½¤Î»ÅÍ;夽¤Î¥¨¥ó¥³¡¼¥É¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤±¤ì¤ÐÀµ³Î¤Ê½èÍý¤ò¹Ô¤¦¤³¤È¤Ï¤Û¤ÜÉÔ²Äǽ¤Ç¤¹¡¥ ¤³¤ì¤Ïereg()¤äPCRE¤Îpreg_match()¤Ç¤âƱÍͤʤΤǡ¤PHP¤Ç¤ÏISO-2022-JP¤Ç¤ÏÀµµ¬É½¸½¤Ï°·¤¨¤Ê¤¤¤È¹Í¤¨¤ë¤Ù¤¤Ç¡¤¤É¤¦¤·¤Æ¤â½èÍý¤ò¤·¤¿¤¤¾ì¹ç¡¤EUC-JP¤Ê¤É¤Ë°ìÅÙÊÑ´¹¤ò¤¹¤ë¤³¤È¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡¥ EUC-JP¡¤Shift_JIS¤Çµ¡¼ï°Í¸ʸ»ú¤Ï°·¤¨¤Ê¤¤ †Ê¸»ú¥¨¥ó¥³¡¼¥ÉEUC-JP¤äShift_JIS¤Ï¡Ö¡û¤È1¤Î¹çÂÎʸ»ú¡Ê¤¤¤ï¤æ¤ë´Ý1¡Ë¡×¤ä¡Ö(³ô)¡×¤Ê¤Éµ¡¼ï°Í¸ʸ»ú¤Ï´Þ¤Þ¤ì¤Æ¤¤¤Þ¤»¤ó¡¥ ¤è¤Ã¤Æ¤½¤ì¤é¤ò´Þ¤àʸ»úÎó¤òmbstring¤Ç°·¤¦¾ì¹ç¡¤EUC-JP¤äShift_JIS¤ò»ØÄꤷ¤Æ¤¤¤ë¤È¤¦¤Þ¤¯ÊÑ´¹¤Ç¤¤Ê¤¤¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡¥ (³ô)¤òEUC-JP¤ËÊÑ´¹¤·¤è¤¦¤È¤·¤Æ¼ºÇÔ¤¹¤ëÎã
$ echo "êæÆ±Ë¼Ò" | \ php -r 'echo mb_convert_encoding( file_get_contents( "php://stdin"), "EUC-JP", "UTF-8");' ?æÆ±Ë¼Ò ¤³¤ì¤é¤ÏEUC-JP¤Çµ¡¼ï°Í¸ʸ»ú¤ò°·¤¤¾ì¹ç¤ÏEUCJP-WIN¡ÊEUCJP-OPEN¡Ë¤ò¡¤Shift_JIS¤Çµ¡¼ï°Í¸ʸ»ú¤ò°·¤¤¾ì¹ç¤ÏSJIS-WIN¡ÊSJIS-OPEN¡Ë¤ò»ØÄꤹ¤ì¤ÐÀµ¤·¤¯°·¤¨¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡¥ (³ô)¤òEUCJP-WIN¤ËÊÑ´¹¤Ç¤¤¿Îã
$ echo "êæÆ±Ë¼Ò" | php -r 'echo mb_convert_encoding( file_get_contents( "php://stdin"), "EUCJP-WIN", "UTF-8");' æÆ±Ë¼Ò ÆâÉôʸ»ú¥¨¥ó¥³¡¼¥É¤Ëµ¤¤ò¤Ä¤±¤ë †php.ini¤Ç¤¤¤¦¤È¤³¤í¤Îmbstring.internal_encoding¡¤PHP¥¹¥¯¥ê¥×¥È¤Ç¸À¤¦mb_internal_encoding()¤ÎÀßÄêÃͤǤ¹¤¬¡¤¤³¤ì¤Ï¤Û¤È¤ó¤É¤Î¾ì¹ç¡¤¡Öʸ»ú¥¨¥ó¥³¡¼¥É¤Î°ú¿ô¤ò¾Êά¤·¤¿¤È¤¤ÎÃ͡פȤ¤¤¦°ÕÌ£°Ê¾å¤Î¤â¤Î¤¬¤¢¤ê¤Þ¤»¤ó¡¥ ¤·¤«¤·¤³¤ì¤«¤é½èÍý¤ò¹Ô¤¦Ê¸»ú¥¨¥ó¥³¡¼¥É¤Ë¹ç¤ï¤»¤Æmb_internal_encoding()¤Çʸ»ú¥¨¥ó¥³¡¼¥É¤òÀßÄꤷ¤Æ¤¤¤ë¥¹¥¯¥ê¥×¥È¤ò¤Þ¤ì¤Ë¸«¤«¤±¤Þ¤¹¡¥ Î㤨¤Ð²¼µ¤Î¥³¡¼¥É¤¬¤¢¤ê¤Þ¤¹¡¥ ̵Â̤ʽèÍý¤¬Â¿¤¤Îã
// PHP¥¹¥¯¥ê¥×¥È¤ÏUTF-8¤Çµ½Ò mb_language( "ja"); mb_internal_encoding( "UTF-8"); $subject = "¤³¤ó¤Ë¤Á¤Ï!!"; $subject = mb_convert_encoding( $subject, "ISO-2022-JP", "UTF-8"); mb_internal_encoding( "ISO-2022-JP"); $encode_subject = mb_encode_mimeheader( $subject, "ISO-2022-JP"); mail( "foo@example", $encode_subject, "test", "From: bar@example.com"); ¤³¤ì¤ÏÈó¾ï¤Ë̵Â̤ʽèÍý¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡¥
¤³¤ì¤Ï²¼µ¤Î¤è¤¦¤Ë¼ÂÁõÎ̤òºï¸º¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡¥ mb_internal_encoding()¤ò³èÍѤ·¤Æ¤¤¤ëÎã
// PHP¥¹¥¯¥ê¥×¥È¤ÏUTF-8¤Çµ½Ò mb_language( "ja"); mb_internal_encoding( "UTF-8"); $subject = "¤³¤ó¤Ë¤Á¤Ï!!"; $encode_subject = mb_encode_mimeheader( $subject mail( "foo@example", $encode_subject, "test", "From: bar@example.com"); Zend Engine¤Èmbstring¤Ï´Ø·¸¤Ê¤¤ †mbstring¤ÏShift_JIS¤ËÂбþ¤·¤Æ¤¤¤ë¤¿¤á¡¤mbstring.internal_encoding¤òShift_JIS¡ÊSJIS¡Ë¤Ë¤·¤Æ¤ª¤±¤ÐPHP¥¹¥¯¥ê¥×¥È¤òShift_JIS¤Ç¼ÂÁõ¤Ç¤¤ë¤È¤¤¤¦´ª°ã¤¤¤ò¤µ¤ì¤Æ¤¤¤ëÊý¤¬¤¤¤é¤Ã¤·¤ã¤¤¤Þ¤¹¡¥ mbstring¤Ï¥Þ¥ë¥Á¥Ð¥¤¥Èʸ»úÎó¤ò°·¤¦¤¿¤á¤Î³ÈÄ¥¥â¥¸¥å¡¼¥ë¤Ç¤¹¤¬¡¤´ðËÜŪ¤ËZend Engine¡ÊPHP¥¹¥¯¥ê¥×¥È¤Îʸˡ¤ò²ò¼á¤·¡¤¼Â¹Ô¤¹¤ë¥¨¥ó¥¸¥ó¡Ë¤È¤Ï´Ø·¸¤¢¤ê¤Þ¤»¤ó¡¥ ¤½¤Î·ë²ÌPHP¥¹¥¯¥ê¥×¥È¾å¤Ç¡Öɽ¡×¤Ê¤É¡¤¤¤¤ï¤æ¤ë5CÌäÂ꤬¤¢¤ëʸ»ú¤ò»ÈÍѤ·¤¿¾ì¹ç¡¤ÌäÂ꤬ȯÀ¸¤¹¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡¥ ¤Ä¤Þ¤ë¤È¤³¤í¡Ömb_¡×¤Ç»Ï¤Þ¤ë´Ø¿ô°Ê³°¤Ï´ðËÜŪ¤Ëmbstring.internal_encoding¤Î±Æ¶Á¤ò¼õ¤±¤º¡¤mbstring.internal_encoding¤òShift_JIS¤Ë¤·¤¿¤«¤é5CÌäÂ꤬²ò·è¤¹¤ë¤È¤¤¤¦¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡¥ Shift_JIS¤ÇPHP¥¹¥¯¥ê¥×¥È¤ò¼ÂÁõ¤·¤¿¤¤¾ì¹ç¡¤PHP¤Î¥Ó¥ë¥É»þ¤Ë--enable-zend-multibyte¤òÉղ䷤ƥӥë¥É¤¹¤ë¤È¤¤¤¤¤è¤¦¤Ç¤¹¡¥ ¤·¤«¤·¼ÂºÝ¤Î¤È¤³¤íPHP¥¹¥¯¥ê¥×¥È¤òShift_JIS¤Çµ½Ò¤Ç¤¤Æ¤â¥Ç¡¼¥¿¥Ù¡¼¥¹¤ÏShift_JIS¤ò»È¤ï¤Ê¤¤Êý¤¬¤¤¤¤¾ì¹ç¤¬¾¯¤Ê¤¯¤Ê¤¯*1¡¤¥á¡¼¥ë¤Ï´ðËÜŪ¤ËShift_JIS¤ò»ÈÍѤ·¤Ê¤¤¤Ê¤É¤È¤¤¤Ã¤¿¤³¤È·ë¶ÉHTML¤ÎÆþ½ÐÎϤΤßShift_JIS¤È¤¤¤¦½èÍý¤òµ½Ò¤¹¤ëÊý¤¬°ÂÁ´¤Ç¤¹¡¥ |