• ベストアンサー

parse_ini_fileでダブルクォートを含む値

parse_ini_fileで読取る設定ファイルでは、 ダブルクォートを含む値を用いることはできないのでしょうか。 ダブルクォートを含んだ値を記述したかったのですが、 設定ファイルのパースエラーになるか、途中で値が切れてしまいました。 以下を試しました。 (PHP 5.0.4 です。) <テストコード> <?php print_r(parse_ini_file("test.ini")); ?> <設定ファイル test.ini の内容> (ダブルクォートを含む) key=val"ue --> 値がvalになる (ダブルクォートをエスケープ) key=val\"ue -->値がval\になる (全体をダブルクォートで囲んで中のダブルクォートをエスケープ) key="val\"ue" -->値がval\になる (全体をダブルクォートで囲んで中のダブルクォートを二連化) key="val""ue" -->パースエラーが発生し、値がvalになる (全体をシングルクォートで囲む) key='val"ue' -->値が'valになる マニュアルで以下の文が気になったのですが・・。 ( http://jp.php.net/manual/ja/function.parse-ini-file.php ) ----- 引用 ここから ----- 次の文字 {}|&~![()" は、キーで使ってはいけません。 また、値の中で特別な意味を持ちます。 ----- 引用 ここまで ----- ダブルクォートが「値の中で特別な意味」を持つ文字として 指定されていますが、具体的にどのような意味を持つのか分かりませんでした。 ですが、キーとしては禁止されているものの、値に含まれる文字としては禁止されていないようだったので・・。 どなたか詳しい情報ご存知の方いましたらご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#172317
noname#172317
回答No.1

【parse_ini_file】検証してみました。 ダブルクォートは、『keyに文字列を入れる際に囲むもの』 としか認識しないようですね。 ダブルクォートを【値】として使いたい場合は、 違う文字(使用禁止文字以外で)でiniファイルに記述し 取り出したのち、置換したほうが無難のようです。

getsleepy
質問者

お礼

遅くなりまして申し訳ありません。 回答いただきありがとうございます。 > ダブルクォートは、『keyに文字列を入れる際に囲むもの』 > としか認識しないようですね。 やはりそうですか・・。 「値の中で特別な意味」とはそういうことなのですね。 > ダブルクォートを【値】として使いたい場合は、 > 違う文字(使用禁止文字以外で)でiniファイルに記述し > 取り出したのち、置換したほうが無難のようです。 ありがとうございます。 その方向で検討してみたいと思います。

その他の回答 (1)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

User Notesのとこにもありますが、定数を使う方法も。 <?php define('QUOTE', '"'); $test = parse_ini_file('test.ini'); ------ key="val" QUOTE "ue" ------ 詳しく調べてないですが、Linux-PHP5.1, Win-PHP5.1 で動作、 Linux-PHP5.0で動作しませんでした。

参考URL:
http://jp.php.net/manual/ja/function.parse-ini-file.php#70847
getsleepy
質問者

お礼

回答いただきありがとうございます。 遅くなりまして申し訳ありません。 > User Notesのとこにもありますが、定数を使う方法も。 ご指摘ありがとうございます。 すみません。User Notesにも情報があったのですね。 英語があまり得意でないもので読み流していました。。 確かに定数が評価されるので、 そのような手法が可能なのですね。 > Linux-PHP5.1, Win-PHP5.1 で動作、 > Linux-PHP5.0で動作しませんでした。 検証までしていただきありがとうございます。 私もLinux-PHP5.1とLinux-PHP5.0で確かめてみました。 確かにPHP5.0ではパースエラーが発生し、 PHP5.1だと期待通りの動作をしました。 PHP5.0でも定数が評価されないわけでは無いようなので、 パースルールが5.0から5.1で変更があったということなのでしょうか。 今回はPHP5.0でも動作させたいので、 KOHSHI様からお教えいただいた手法で検討してみたいと思います。 どうもありがとうございました。

関連するQ&A