【问题标题】:htmlentities and é (e acute)htmlentities 和 é (e 锐度)
【发布时间】:2021-11-22 21:26:24
【问题描述】:

我遇到了 PHP 的 htmlentities 和 é 字符的问题。我知道这是我忽略的某种编码问题,所以希望有人能看到我做错了什么。

直接运行htmlentities("é") 不会按预期返回正确的代码(éé。我尝试将字符集强制为“UTF-8”(使用 htmlentities 的字符集参数)但是同样的事情。

最终目标是让这个字符在以“ISO-8859-1”编码的 HTML 电子邮件中发送。当我尝试强制它进入该编码时,同样的问题。在电子邮件的源代码中,您会看到 é,在 HTML 视图中看到 é

谁能解释我的错误?

【问题讨论】:

  • 尝试调用get_html_translation_table() 并查看结果数组。这将告诉您是否应该翻译您的 e-acute。如果这不起作用,您可以随时获取此表,将 e-acute 添加到其中,然后使用strtr($string, $table) 进行编码。
  • 确保您的文件以 UTF-8 编码,并确保您的 编码字符设置正确。
  • 如果您将网站编码设置为 UTF-8(使用 <meta> 标记或 http 标头,则根本不需要对重音字符进行实体编码。

标签: php character-encoding html-entities


【解决方案1】:
// I assume that your page is utf-8 encoded
header("Content-type: text/html;charset=UTF-8");

$in_utf8encoded = "é à ù è ò";

// first you need the convert the string to the charset you want...
$in_iso8859encoded = iconv("UTF-8", "ISO-8859-1", $in_utf8encoded);

// ...in order to make htmlentities work with the same charset
$out_iso8859= htmlentities($in_iso8859encoded, ENT_COMPAT, "ISO-8859-1");

// then only to display in your page, revert it back to utf-8
echo iconv("ISO-8859-1", "UTF-8", $out_iso8859);

【讨论】:

  • 谢谢! iconv 修复了我的电子邮件编码问题。
  • 添加编码是这里的关键 - 特别是如果 htmlentities 之前为你工作,并且坏了。 PHP 团队有一个巧妙的想法,不只是将 defaults 更改为 htmlentities 一次,而是两次。在 5.4 之前,它是 ISO-8859-1。 5.4 之后和 5.6 之前是 UTF-8。从 5.6 开始,它就是 php.ini 中的 default_charset 设置。指定编码后,它将再次起作用,不需要 htmlspecialchars。如果您突然丢失数据,请记住这一点,因为您依赖记录的 (!) 默认值不会更改。 PHP 总是充满惊喜——而且不是很好。
【解决方案2】:

我已经加了htmlspecialchars给你看是真的编码了

http://sandbox.phpcode.eu/g/11ce7/4

<?PHP
echo htmlspecialchars(htmlentities("é", ENT_COMPAT | ENT_HTML401, "UTF-8"));

【讨论】:

    【解决方案3】:

    我建议你看看http://php.net/html_entity_decode。您可以通过以下方式使用它:

    $eacute = html_entity_decode('&eacute;',ENT_COMPAT,'iso-8859-1');
    

    这样你就不必关心php文件的编码了。 编辑:错别字

    【讨论】:

    • 我不是在尝试解码,而是在尝试编码。请在发帖前阅读问题。
    【解决方案4】:

    如果您已将特殊字符存储为 é,那么您可以在连接到 database 后立即使用以下内容。

    mysql_set_charset('utf8', $dbHandler); 
    

    有了这个,您现在不需要在显示数据时使用htmlentities

    【讨论】:

    • 我不记得说过任何关于数据库的事情。
    • 我知道,但我建议在与您相同的情况下对我有用的东西。使用这种方式,它将在从数据库中提取时对所有内容进行编码,并避免使用其他 php 函数,如 htmlentitieshtml_entity_decodehtml_entity_encode
    • 我的情况不涉及任何方式、形状或形式的数据库。因此,OP 中没有提到数据库的原因。请在匆忙发布之前阅读。
    猜你喜欢
    • 1970-01-01
    • 2011-09-21
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 2016-03-25
    • 1970-01-01
    相关资源
    最近更新 更多