
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ランキング
-
「次の10件を表示する」のよ...
-
「SELECT文の発行」と書かれい...
-
Dosブロンプトでtabを出力したい
-
スクレイピングに適した言語を...
-
C#でのForm間のデータ受け渡し...
-
shシェルスクリプト 空白行の...
-
「取得先」という表現について
-
ファイル名に日付の挿入
-
DTOとEntityの差は何ですか。
-
EXCEL、マクロ-改ページ行番号...
-
バッチファイルでpingの結果を...
-
php 入力画面から確認表示画面...
-
wordの差し込み印刷で文字...
-
【C#】DataGridViewの最大列数...
-
jQueryのスライドショーのカス...
-
ログインしたら他からログイン...
-
DMMの動画を全件取得したのです...
-
curlで取得出来るデータの制限...
-
TCPでデータを受け取ってそれを...
-
php4のセッション機能とブラウ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブルに送信ボタンをつける
-
「次の10件を表示する」のよ...
-
if文について
-
CakePHP リッチテキストエディ...
-
二つの条件が不等価の場合の記述
-
以下のエラーメッセージ解決法...
-
PHPにて自動計算した値をデータ...
-
「ソースコードは 左~右へと読...
-
!==について
-
PHPの基本的な作法について
-
PHP ハイパーリンク
-
POSTされたかどうか確かめる方...
-
<python>importについて
-
null代入とunset()の違いについて
-
頭が混乱。submitからデータが...
-
<A href ~で複数の値を渡したい
-
ダブルクォーテーションで囲ま...
-
デバッグ用関数について
-
逆順表示したい?
-
vbYesNoの使い方
おすすめ情報