在php.ini中使用感叹号转义超链接

时间:2010-04-14 17:12:06

标签: php

我有一个配置文件,它接受如下文本警告:

warnings.1 = Please check the date

这些以HTML格式呈现给用户。我需要嵌入如下的超链接:

warnings.1 = <a href="http://foo.com/!FOO!/">check with foo</a>

我不能为我的生活找出如何逃避这一点,以便parse_ini_file()可以读取它并以我想要的方式获取该字符串。

4 个答案:

答案 0 :(得分:1)

http://php.net/manual/en/function.parse-ini-file.php

array parse_ini_file(string $filename [, bool $process_sections = false [, int $scanner_mode = INI_SCANNER_NORMAL]])

scanner_mode:

可以是INI_SCANNER_NORMAL(默认)或INI_SCANNER_RAW。如果提供了INI_SCANNER_RAW,则不会解析选项值。

更新日志: 5.3.0添加了可选的scanner_mode参数。

如果你没有参加5.3,那你就搞砸了。或者您需要使用不同的实现,parse_ini_file不是PHP的唯一INI文件解析器。

答案 1 :(得分:0)

尝试使用urlencode,感叹号应该如下转义:

urlencode("foo.com/!FOO!/");

输出:

foo.com%2F%21FOO%21%2F

答案 2 :(得分:0)

我最终切换到Zend_Config_Xml,因为对于我们的开发人员来说,如何逃避数据比尝试解决稍微奇怪的.ini语法要清楚得多。

感谢所有人的回答。

答案 3 :(得分:0)

我最近遇到了一个类似的场景,经过一番思考后我得出的结论是问题不在于使用的函数或类,而在于使用本身。参数值,例如

<a href="http://foo.com/!FOO!/">check with foo</a>

可以更好地实现,只有href的值是参数的值。例如:

warnings.1.href = "http://foo.com/!FOO!/"
warnings.1.text = "check with foo"

这是因为参数值应该只包含绑定要更改的值(从实例到实例)。在您的情况下,锚标签最好留在html本身,而不是.ini配置文件中。这不仅可以使您的配置文件保持轻量级,而且还可以保持其清洁,因为HTML代码应该在HTML中,而配置文件中的配置值也应该分开。

所以是的,没有必要切换PHP版本或向parse_ini_file函数添加参数(因为这样做会对Zend_Config_Ini类进行破解,如果需要,最好将其作为官方补丁)。