[PHP-users 2149] Re: SJIS->EUC bug ?

Yasuo Ohgaki php-users@php.gr.jp
Tue, 18 Sep 2001 18:55:56 +0900


大垣です。

php-dev@php.gr.jp にも送っています。

文字化けをするどうか作ってしまいました。
少なくとも私の環境では簡単に再現できます。
PHP4.0.7RC2/Apache 1.3.20/Linux-2.4.4,glibc-2.2.2

<?php
// 日本語自動認識用文字列
// You need PHP4.0.7 or later to run
/**
Table
create table test (
  str text
);
*/
if (!empty($_POST['q']))
{
        $sql = "SELECT * FROM test WHERE str like
'%".$_POST['q']."%'";

        $db = pg_connect("host=localhost dbname=yohgaki
user=yohgaki");
        $rs = pg_exec($db, $sql);
        if (pg_numrows($rs))
        {
                $result = pg_fetch_array($rs,0);
                echo "<pre>";
                print_r($result);
                echo "</pre>";
        }
        echo "q=".$_POST['q']."   sql=".$sql;
}
else
{
?>
 <html>
  <head></head>
  <body>
  <form method="post">
  <input type="text" name="q">
  <input type="submit">
  </form>
  </body>
 </html>
<?php
}
?>

クエリ用の文字に“箱”と一文字だけ入れると間違って変換されます。

q=U+222 sql=SELECT * FROM test WHERE str like '%U+222%'

“あ箱”、”箱あ”では問題ありません。

q=箱あ sql=SELECT * FROM test WHERE str like '%箱あ%'
q=あ箱 sql=SELECT * FROM test WHERE str like '%あ箱%'

> いつもお世話になっております。船木@秋田県立図書館です。
> 環境は、FreeBSD4.2+PHP4.0.6+apache1.3.20+PostgreSQL7.1.2です。
> PHPはmbstring付きです。
>
> で、当館で運用しておりますWeb蔵書検索において、書名に
> 「箱」(EUC:C8A2) 、「柊」(EUC:C9A2)、「國」(EUC:D4A2)を
> 指定しますと、pg_execが正常終了しないと言う現象が起きています。
> # ごらんの通り、2バイト目がA2のヤツがおかしい。

ソースは見ていませんが、mb_filter辺りにバグが在るのかも知れません。

--
Ohgaki, Yasuo (大垣 靖男) 
Mail: yohgaki@dd.iij4u.or.jp