【问题标题】:htmlentities destroys utf-8 stringshtmlentities 销毁 utf-8 字符串
【发布时间】:2011-04-15 16:30:36
【问题描述】:

我在这里发生了一些奇怪的事情,我不明白为什么,在我的 php 5.2.5 服务器上(只是在 Linux 上,Windows php 服务器没有同样的问题) 当我使用 POST 表单在包含“é”的输入上发布内容时,我在另一侧

echo(htmlentities($_POST["myinput"])) 

它与é 相呼应

但如果我回应我的

$_POST["myinput"] 

只是显示“é”,所以这意味着我的 htmlentities 默认不使用 UTF-8,我在哪里可以更改 htmlentities 使用的字符集?

我尝试在我的 php.ini default_charset = "UTF-8" 中更改它,但它也不起作用?

【问题讨论】:

  • 第一个停靠港:manual。 :)
  • 我已阅读手册,我的问题是如何更改 htmlentities 的默认编码...它说默认使用 ISO-8859-1,“默认”的概念意味着它可以在某处更改...但即使我更改了 php 使用的 default_charset 它也不起作用。
  • 值得注意的是,您不需要 HTML 实体在编码为 UTF-8 的 HTML 中显示 é
  • 我们想要实现的是 与 htmlspecialchar,但我们注意到该错误也影响了 htmlentities。

标签: php


【解决方案1】:

htmlspecialchars($str, ENT_QUOTES, "UTF-8")

这也比htmlentities()更能防止xss

【讨论】:

  • 你是对的,但我仍然很确定我从未使用过第三个参数,也从未遇到过这个问题,这可能与我的主机最近所做的更改有关吗?
  • 这太棒了!对我来说,MySQL 的列是“UTF-8”(太棒了!),但即使将字符集设置为 UTF-8 客户端也不起作用,因为我使用的是 htmlentities(),它破坏了波兰语中的 ć 字符(它们是带有问号的黑色菱形)。这两个额外的参数为我节省了几个小时,谢谢!
  • 来自官方手册 htmlentities() 采用可选的第三个参数编码,它定义了转换中使用的编码。从 PHP 5.6.0 开始,default_charset 值被用作默认值。从 PHP 5.4.0 开始,UTF-8 是默认值。 PHP 5.4.0 之前的版本,默认使用 ISO-8859-1。尽管此参数在技术上是可选的,但强烈建议您为代码指定正确的值。 fi2.php.net/manual/en/function.htmlentities.php
  • 使用相同的参数使用 htmlentities() 我遇到了同样的问题,但是切换到 htmlspecialchars() 因为这个答案建议解决了我这边的问题。谢谢!
【解决方案2】:

在 5.4.0 版中,编码参数的默认值已更改为 UTF-8。

来源:Manual

【讨论】:

  • 并在 5.6.0 中再次更改。 "从 PHP 5.6.0 开始,default_charset 值被用作默认值。"
【解决方案3】:

更改htmlentities() 编码的唯一方法是在其第三个参数中指定它。

无法更改默认编码。在 PHP 5.4 之前它总是iso-8859-1

这在 PHP 5.4 中有所改变,现在始终为 utf-8

【讨论】:

    【解决方案4】:

    来自 php manual : htmlentities() 采用可选的第三个参数编码,它定义了转换中使用的编码。从 PHP 5.6.0 开始,default_charset 值被用作默认值。从 PHP 5.4.0 开始,UTF-8 是默认值。 PHP 5.4.0 之前的版本,默认使用 ISO-8859-1。尽管此参数在技术上是可选的,但强烈建议您为代码指定正确的值。

    【讨论】:

      【解决方案5】:
      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 2017-03-04
      • 2015-01-19
      • 1970-01-01
      • 2016-05-31
      • 1970-01-01
      • 2011-09-30
      • 2013-01-17
      相关资源
      最近更新 更多