バッチのバグに困っています(「ァー」が「ゼ」に)
久々にまじめな技術ネタ。
最近、地方競馬の出走予定馬を取り込むプログラムをちょっといじったんですが
どうも変なデータが取り込まれてしまってます。
タイトルにも書きましたけど、
「ァー」が「ゼ」に置き換わるんです。
例えば、出走馬にヤマニンゼファー(古!)がいたとしましょう。
・・・うちのデータベースに取り込むと、
「ヤマニンゼフゼ」になってしまうんです。
原因は・・・ですね。
うちのデータベース、Webページなどは
EUC-JPという文字コードを使ってます。
ま、いわばUNIXでの標準文字コードですな。
で、「ァ(ちっさいア)」の文字コードはA5A1、
「−(伸ばし棒)」の文字コードはA1BC、
「ゼ」の文字コードはA5BC。
出走馬取り込みプログラムの中で・・・
// 全角スペ削除
= preg_replace(/ /,,);
ってね。
「(全角スペ)」の文字コード、A1A1。
「ァー」=A5A1A1BC
全角スペA1A1を取っ払うと、A5BC=「ゼ」
ちなみにstr_replace()でも同じ現象が発生します。
このあたり、プログラムをいじる前は、UTF-8で動いていたので
いままではうまくいってたんでしょうね。
さて。どう対処するか。
方法としては、文字コードを一旦変換するしかないんだろうな。
mb_stringがらみの関数をPHPマニュアルで調査・・・。
最近、地方競馬の出走予定馬を取り込むプログラムをちょっといじったんですが
どうも変なデータが取り込まれてしまってます。
タイトルにも書きましたけど、
「ァー」が「ゼ」に置き換わるんです。
例えば、出走馬にヤマニンゼファー(古!)がいたとしましょう。
・・・うちのデータベースに取り込むと、
「ヤマニンゼフゼ」になってしまうんです。
原因は・・・ですね。
うちのデータベース、Webページなどは
EUC-JPという文字コードを使ってます。
ま、いわばUNIXでの標準文字コードですな。
で、「ァ(ちっさいア)」の文字コードはA5A1、
「−(伸ばし棒)」の文字コードはA1BC、
「ゼ」の文字コードはA5BC。
出走馬取り込みプログラムの中で・・・
// 全角スペ削除
= preg_replace(/ /,,);
ってね。
「(全角スペ)」の文字コード、A1A1。
「ァー」=A5A1A1BC
全角スペA1A1を取っ払うと、A5BC=「ゼ」
ちなみにstr_replace()でも同じ現象が発生します。
このあたり、プログラムをいじる前は、UTF-8で動いていたので
いままではうまくいってたんでしょうね。
さて。どう対処するか。
方法としては、文字コードを一旦変換するしかないんだろうな。
mb_stringがらみの関数をPHPマニュアルで調査・・・。
このネタへのコメント:
コメントはありません。