【问题标题】:How to set ENT_QUOTES flag by default for htmlentities() function in php如何在 php 中为 htmlentities() 函数默认设置 ENT_QUOTES 标志
【发布时间】:2012-11-04 23:14:40
【问题描述】:

我在显示之前对从数据库中提取的任何数据使用htmlentities($data, ENT_QUOTES)

有没有一种方法可以默认为htmlentities() 函数设置标志ENT_QUOTES,这样即使我写htmlentities($data) 它也应该像htmlentities($data, ENT_QUOTES) 一样工作。

如 php 文档中所写,默认为 ENT_COMPAT | ENT_HTML401

为了您的信息,我正在使用 codeigniter 框架,php5。

更新 1:按照 Michael 的建议使用自定义函数进行包装可能会有所帮助,但我已经在网站中的任何地方都使用了它,没有 ENT_QUOTES 标志,我想知道 php 是否提供了一种方法来更改其函数的默认值。

更新 2:我认为 codeigniter 提供的 html_escape() 内置函数(由 Wesley 建议)对我来说是最好的,这样我就不必编写自己的包装函数了。

【问题讨论】:

  • 你为什么用htmlentities,而不是htmlspecialchars
  • 你可以只包装函数。 function my_htmlentities($string) {return htmlentities($string, ENT_QUOTES);} 并改为致电 my_htmlentities()
  • @zerkms 也许通常在 HTML 属性中使用它,htmlentities() 以更直接的方式处理引号编码。
  • @Zerkms:就这个问题而言,这并没有什么不同,因为对于 htmlspecialchars 我也需要提供 ENT_QUOTES 标志.. 对吗?
  • @Michael:包装函数当然是一个很好的技巧,它应该可以工作..我会尝试一下:)但是有没有更基本的方法以及更改一些 ini 等。

标签: php codeigniter html-entities


【解决方案1】:

据我所知,无法更改默认标志,但在 cmets 中给您的建议绝对是解决此问题的最佳方法:使用包装函数。

方便地,Codeigniter 已经内置了一个,适当命名:

echo html_escape($string);

你也可以传入数组,它的作用如下:

/**
* Returns HTML escaped variable
*
* @access   public
* @param    mixed
* @return   mixed
*/
if ( ! function_exists('html_escape'))
{
    function html_escape($var)
    {
        if (is_array($var))
        {
            return array_map('html_escape', $var);
        }
        else
        {
            return htmlspecialchars($var, ENT_QUOTES, config_item('charset'));
        }
    }
}

只需在您的项目中搜索htmlentities 并(小心地)替换为html_escape。这也为您提供了在未来轻松进行更改的机会,因为您可以更改功能。初期的时间投入有点小,但很值得。

【讨论】:

  • 我想这就是我要找的东西。谢谢 :)
  • 它还可以清理数组这一事实让我的生活变得轻松了很多。我只需在控制器本身中一次传递完整的数据数组,然后再将其发送到视图。
【解决方案2】:

如果您直接访问变量。 例如: $this->model_name->变量;

然后您可以在模型名称中使用 __get 函数并在它从对象访问之前对其进行处理。 http://www.php.net/manual/en/language.oop5.overloading.php#object.get

【讨论】:

  • 我没明白..它是如何解决我的目的的?
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 2019-02-06
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
  • 2022-11-24
  • 2015-03-31
  • 2011-01-30
相关资源
最近更新 更多