- mso
- ぬし
- 会議室デビュー日: 2003/12/04
- 投稿数: 496
- お住まい・勤務地: 宮城
|
投稿日時: 2005-12-15 16:06
msoです。
分からないことがあり、調査したのですが
アドバイスをいただけたらと思い書き込みました。
現在、以下の環境で開発を行っています。
Debian: 3.1(sarge)
MySQL: 4.0.18
PHP: 4.3.10
Apache2: 2.0.52
現在、MySQLの文字コードをS-jis、PHPをEUCに設定してあります。
このとき、MySQLからデータを取得した際に、
「1週間」というデータが入っていると「1鬼」と文字化けします。
俗に言われる5C問題かと思ったのですが、
どうも違うようです。
DBから取得した文字は基本的に
$hoge = mb_convert_encoding($foo,"EUC-JP","SJIS");
と変換してから、表示を行っています。
まず、原因の切り分けをするところから出来ていないのですが、
どのようにしたら良いのでしょうか?
|
- コブラ
- ぬし
- 会議室デビュー日: 2003/07/18
- 投稿数: 1038
- お住まい・勤務地: 神奈川
|
投稿日時: 2005-12-15 17:14
httpd.confの DefaultCharSet は何?
|
- mso
- ぬし
- 会議室デビュー日: 2003/12/04
- 投稿数: 496
- お住まい・勤務地: 宮城
|
投稿日時: 2005-12-15 17:27
msoです。
引用: |
|
コブラさんの書き込み (2005-12-15 17:14) より:
httpd.confの DefaultCharSet は何?
|
確認をしたところ
DefaultCharsetで検索をしたところ、
コード: |
|
#AddDefaultCharset ISO-8859-1
|
となっていたので、何も設定されていないようです。
DefaultCharSetにShift-JISかEUC-JPを設定した方がよろしいでしょうか?
|
- あつしfx
- 大ベテラン
- 会議室デビュー日: 2002/04/08
- 投稿数: 104
- お住まい・勤務地: XPできるところ
|
投稿日時: 2005-12-16 00:07
PHPでの設定はphpinfoかphp.iniを見ると良いです。
で、問題は
・DBからの生データでのEncodingがどうなっているか、
・出力時に変な変換がかかってないか
でしょう。
日本語コードは
mbstring関係で結構はまるので、そこを確認してください。
特にmb_http_output,mb_internal_encodingとかです。
_________________ http://aglabo.com/ @Homepage
http://furukawa-select.com/mt/ @Blog
|
- MMX
- ぬし
- 会議室デビュー日: 2001/10/26
- 投稿数: 861
|
投稿日時: 2005-12-16 09:49
OSM オープンソースマガジン 2006-1 p68-69
では、MySQL4.1 以降では--- と解説があります。
概念は、「サーバー側のエンコーディング指定」「クライアント側のエンコーディング指定」です、mysql> SET NAMES hoge とか MySQL5.0 では skip-character-set-client-handshake とか
今は本屋に並んでいます。
|
- mso
- ぬし
- 会議室デビュー日: 2003/12/04
- 投稿数: 496
- お住まい・勤務地: 宮城
|
投稿日時: 2005-12-16 13:54
msoです。
>あつしFXさん
一応、確認は行っているのですが週間が鬼と表示される以外は
特に問題はないようです。
>MMXさん
オープンソースマガジンはまだ見ていないのですが、
確認させていただきます。
php.iniの設定は以下のようになっております。
コード: |
|
[PHP]
engine = On
short_open_tag = On
asp_tags = Off
precision = 12
y2k_compliance = On
output_buffering = Off
output_handler = mbstring.http_output
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func=
serialize_precision = 100
allow_call_time_pass_reference = On
safe_mode = Off
safe_mode_gid = Off
safe_mode_include_dir =
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
disable_functions =
disable_classes =
expose_php = On
max_execution_time = 30
max_input_time = 60
memory_limit = 8M
error_reporting = E_ALL
display_errors = On
display_startup_errors = On
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
variables_order = "EGPCS"
register_globals = Off
register_argc_argv = On
post_max_size = 8M
gpc_order = "GPC"
magic_quotes_gpc = On
magic_quotes_runtime = Off
magic_quotes_sybase = Off
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
default_charset = "EUC-JP"
include_path = ".:/usr/share/php/"
doc_root =
user_dir =
enable_dl = On
file_uploads = On
upload_max_filesize = 2M
allow_url_fopen = On
default_socket_timeout = 60
/usr/lib/perl5/auto/DBD/mysql/mysql.so
[Syslog]
define_syslog_variables = Off
[mail function]
SMTP = localhost
smtp_port = 25
[Java]
[SQL]
sql.safe_mode = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[MySQL]
mysql.allow_persistent = On
mysql.max_persistent = -1
mysql.max_links = -1
mysql.default_port =
mysql.default_socket =
mysql.default_host =
mysql.default_user =
mysql.default_password =
mysql.connect_timeout = 60
mysql.trace_mode = Off
[mSQL]
msql.allow_persistent = On
msql.max_persistent = -1
msql.max_links = -1
[PostgresSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[Sybase]
sybase.allow_persistent = On
sybase.max_persistent = -1
sybase.max_links = -1
sybase.min_error_severity = 10
sybase.min_message_severity = 10
sybase.compatability_mode = Off
[Sybase-CT]
sybct.allow_persistent = On
sybct.max_persistent = -1
sybct.max_links = -1
sybct.min_server_severity = 10
sybct.min_client_severity = 10
[dbx]
dbx.colnames_case = "unchanged"
[bcmath]
bcmath.scale = 0
[browscap]
[Informix]
ifx.default_host =
ifx.default_user =
ifx.default_password =
ifx.allow_persistent = On
ifx.max_persistent = -1
ifx.max_links = -1
ifx.textasvarchar = 0
ifx.byteasvarchar = 0
ifx.charasvarchar = 0
ifx.blobinfile = 0
ifx.nullformat = 0
[Session]
session.save_handler = files
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.serialize_handler = php
session.gc_divisor = 100
session.gc_maxlifetime = 1440
session.bug_compat_42 = 1
session.bug_compat_warn = 1
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="
[MSSQL]
mssql.allow_persistent = On
mssql.max_persistent = -1
mssql.max_links = -1
mssql.min_error_severity = 10
mssql.min_message_severity = 10
mssql.compatability_mode = Off
mssql.secure_connection = Off
[Assertion]
[Ingres II]
ingres.allow_persistent = On
ingres.max_persistent = -1
ingres.max_links = -1
ingres.default_database =
ingres.default_user =
ingres.default_password =
[Verisign Payflow Pro]
pfpro.defaulthost = "test-payflow.verisign.com"
pfpro.defaultport = 443
pfpro.defaulttimeout = 30
[com]
[Printer]
[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = EUC-JP
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
[FrontBase]
[Crack]
[exif]
extension=mysql.so
|
|
- mso
- ぬし
- 会議室デビュー日: 2003/12/04
- 投稿数: 496
- お住まい・勤務地: 宮城
|
投稿日時: 2005-12-16 14:05
msoです。
すいません、単純に共通部品のバグでした。
プログラムの修正で正しくなりました。
|
- mso
- ぬし
- 会議室デビュー日: 2003/12/04
- 投稿数: 496
- お住まい・勤務地: 宮城
|
投稿日時: 2005-12-16 14:18
msoです。
プログラムを修正し、正しくなったと思ったのですが
原因がよくわかりません。
今回の問題については5C問題を変換する共通のプログラムでした。
コード: |
|
$var = str_replace("噂","噂\\",$var);
|
上記が問題のプログラムですが、
ここを処理すると週間→鬼になります。
処理が間違っているようであれば、ご指摘ください。
|