[PHP-users 3273] Re: 変数内の”のはずし方

松嶋祥文 php-users@php.gr.jp
Sat, 03 Nov 2001 12:50:58 +0900


こんにちは、松嶋@ITBoost です。

| PHP4でstr_replaceなどで、置き換えようとしましたが、"そのものがエスケープしても置
| き換わりません。

どのようにされたのかわかりませんが、書くとすれば
別スレッドの小倉さんのコードを拝借して(^^;;) 、

$fp = fopen("test.csv", "r");

while ($a = fgetcsv($fp, 1000, ',')) {
  for ($i = 0; $i < count($a); $i++) {
    $a[$i] = ereg_replace('^"', '', $a[$i]);
    $a[$i] = ereg_replace('"$', '', $a[$i]);
    $csv[$i][] = $a[$i];
  }
}

などとすることで取れるとおもいます(ベタな書き方ですみません)。

ダブルクォーテーションがデータ中に存在しないことが保証されてい
るなら、下記のようになります。

while ($a = fgetcsv($fp, 1000, ',')) {
  for ($i = 0; $i < count($a); $i++) {
    $csv[$i][] = $a[$i];
  }
  $csv[$i] = str_replace('"', '', $csv[$i]);
}
# ここで一括で
# $csv = str_replace('"', '', $csv) ;
# とかでもいいのかな?


元の CSV は、Excel のデータでしょうか?
その場合、Shift-JIS ですね。

いずれにせよ、日本語が含まれるなら ereg_replace よりも、マル
チバイト対応の mbereg_replace などを使ったほうが安全です。
お使いのレンタルサーバーで使えないかもしれませんが。

# 「"」の置換だけなら、mb 系の関数を使わなくても問題ないかな?

-- 
                                               ,-------------+
+---------------------------------------------'              |
| システム開発&エンジニアスクール アイティーブースト       |
| 松嶋 祥文 [ mats@itboost.co.jp ]                ,-------------+
| +----------------------------------------------'              |
| | ★ Linux 関連の技術情報満載!    http://www.itboost.co.jp/  |
+-|■■■■■ Web アプリケーション開発、請け負います!■■■■■|
  +-------------------------------------------------------------+