繁体   English   中英

php.ini中带有感叹号的转义超链接

[英]Escape hyperlink with exclamation marks in php.ini

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

warnings.1 = Please check the date

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

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

我一辈子都想不出如何逃避它,以使parse_ini_file()可以读取它并以我想要的方式获取该字符串。

http://php.net/manual/zh/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文件解析器。

尝试使用urlencode ,应将感叹号这样转义:

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

输出:

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

我最终切换到Zend_Config_Xml,因为对我们的开发人员而言,比起尝试解决有点怪异的.ini语法,如何转义数据更为清楚。

感谢所有的答案。

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

<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类的黑客,如果需要的话,最好将其作为正式补丁进行)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM