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-f … )
----- 引用 ここから -----
次の文字 {}|&~![()" は、キーで使ってはいけません。 また、値の中で特別な意味を持ちます。
----- 引用 ここまで -----
ダブルクォートが「値の中で特別な意味」を持つ文字として
指定されていますが、具体的にどのような意味を持つのか分かりませんでした。
ですが、キーとしては禁止されているものの、値に含まれる文字としては禁止されていないようだったので・・。
どなたか詳しい情報ご存知の方いましたらご教授ください。
No.1ベストアンサー
- 回答日時:
【parse_ini_file】検証してみました。
ダブルクォートは、『keyに文字列を入れる際に囲むもの』
としか認識しないようですね。
ダブルクォートを【値】として使いたい場合は、
違う文字(使用禁止文字以外で)でiniファイルに記述し
取り出したのち、置換したほうが無難のようです。
遅くなりまして申し訳ありません。
回答いただきありがとうございます。
> ダブルクォートは、『keyに文字列を入れる際に囲むもの』
> としか認識しないようですね。
やはりそうですか・・。
「値の中で特別な意味」とはそういうことなのですね。
> ダブルクォートを【値】として使いたい場合は、
> 違う文字(使用禁止文字以外で)でiniファイルに記述し
> 取り出したのち、置換したほうが無難のようです。
ありがとうございます。
その方向で検討してみたいと思います。
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-f …
回答いただきありがとうございます。
遅くなりまして申し訳ありません。
> 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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- お菓子・スイーツ サーティワンについてで アイスの入れる袋 小、パイント、クォート、中、大、ってそれぞれ何個のシングル 2 2022/09/17 10:51
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- その他(プログラミング・Web制作) AndroidStudio 途中で終了する。 1 2023/04/26 11:21
- Java Java 南京錠 2 2023/02/04 11:46
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- 一戸建て 注文住宅の総費用について 2 2022/08/13 17:12
- Visual Basic(VBA) Worksheets メソッドは失敗しました。のエラー処理のやり方 4 2022/05/29 21:29
- その他(プログラミング・Web制作) ColabでのPytorchのエラー 1 2022/11/19 20:51
- ホテル・旅館 ホテルの厚意でのアップグレードの場合 5 2023/06/10 13:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
php 自作関数
-
アクセスキーについて
-
Dosブロンプトでtabを出力したい
-
Yahoo! JAPAN IDを新規取得でき...
-
DTOとEntityの差は何ですか。
-
shシェルスクリプト 空白行の...
-
switch()文で値の大小比較
-
wordの差し込み印刷で文字...
-
「取得先」という表現について
-
phpでcookieがうまく保存されない
-
SESSION情報は、ブラウザを起動...
-
syntax error, unexpected 'ech...
-
PHP、ヒアドキュメント内でのIF...
-
昨日の日付名でファイルを作成...
-
Excel VBA:特定の文字列以降(...
-
PHPで訪問回数を表示するカウン...
-
PHP 九九表
-
開始と終了を指定して、その間...
-
セッション中に有効期限切れの...
-
ブラウザを閉じた後もセッショ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日付を基にした乱数生成
-
<A href ~で複数の値を渡したい
-
「次の10件を表示する」のよ...
-
PHPでwait処理ってできます?
-
POSTされたかどうか確かめる方...
-
PHPのif文「POSTしていな...
-
PHPでのNULLの正規表現
-
テーブルに送信ボタンをつける
-
if (isset($_a)&&$_a)この意味は
-
逆順表示したい?
-
if文の複数条件。
-
PHP フラグ
-
PHP ハイパーリンク
-
null代入とunset()の違いについて
-
SQLのデータを分割してブラウザ...
-
$_SERVER["QUERY_STRING"]の仕...
-
Luaにて、and or の組み合わせ...
-
whileループの中でフォーム入力...
-
switch文で2つ以上の変数の値...
-
parse_ini_fileでダブルクォー...
おすすめ情報