【问题标题】:Convert ' to an apostrophe in PHP将 ' 转换为 PHP 中的撇号
【发布时间】:2011-10-11 02:27:08
【问题描述】:

我的数据中有许多 HTML 实体 (• ...etc),包括 '。我只是想把它转换成它的等效字符。

我认为 htmlspecialchars_decode() 会起作用,但是 - 没有运气。想法?

我试过这个:

echo htmlspecialchars_decode('They're here.');

但它返回:They're here.

编辑:

我也尝试过 html_entity_decode(),但它似乎不起作用:

echo html_entity_decode('They're here.')

也返回:They're here.

【问题讨论】:

    标签: php html special-characters decode


    【解决方案1】:

    由于' 不是HTML 4.01 的一部分,默认情况下它不会转换为'

    在 PHP 5.4.0 中,extra flags were introduced 处理不同的语言,每种语言都包含' 作为一个实体。

    这意味着你可以这样做:

    echo html_entity_decode('They're here.', ENT_QUOTES | ENT_HTML5);
    

    您将需要ENT_QUOTES(转换单引号和双引号)和ENT_HTML5(或除ENT_HTML401 之外的任何语言标志,因此请选择最适合您的情况的标志)。

    在 PHP 5.4.0 之前,您需要使用 str_replace:

    echo str_replace(''', "'", 'They're here.');
    

    【讨论】:

    • 我已经更新了 PHP 5.4.0 的答案(支持 eric.itzhak 进行更新)。
    【解决方案2】:

    有一种“正确”的方式,不使用 str_replace ,@cbuckley 是正确的,因为 html_entity_decode 的默认值是 HTML 4.01,但您可以设置一个 HTML 5 参数来对其进行解码。

    像这样使用它:

    html_entity_decode($str,ENT_QUOTES | ENT_HTML5)
    

    【讨论】:

      【解决方案3】:

      很遗憾,'html_entity_decodehtmlspecialchars_decode 函数使用的 PHP 转换表中没有 ' 实体和许多其他实体。

      检查 PHP 手册中的此评论: http://php.net/manual/en/function.get-html-translation-table.php#73410

      【讨论】:

        【解决方案4】:

        这应该可行:

        $value = "They're here.";
        html_entity_decode(str_replace("'","'",$value));
        

        【讨论】:

        • 感谢您的宝贵时间,但这与已经批准的答案相同。
        【解决方案5】:

        你真正要找的是html_entity_decode()

        html_entity_decode() 将所有实体转换为字符,而 htmlspecialchars_decode() 仅反转 htmlspecialchars() 将编码的内容。

        编辑:查看我链接到的页面上的示例,我做了更多调查,以下似乎不起作用:

        [matt@scharley ~]$ php
        <?php
        $tmp = array_flip(get_html_translation_table(HTML_ENTITIES));
        var_dump($tmp['&apos;']);
        PHP Notice:  Undefined index: &apos; in - on line 3
        NULL
        

        这就是它不起作用的原因。为什么它不在查找表中完全是另一个问题,很遗憾我无法回答。

        【讨论】:

        • @Dave:不幸的是,您可能需要自己动手......似乎 PHP 不支持反转 &amp;apos; 出于某种原因。有关更多信息,请参阅我的编辑。
        • 这似乎是因为&amp;apos; 不是 HTML 4.01 的一部分。
        • @cbuckley 听起来像是一个可能的原因。 &amp;apos; 被拉入 XHTML 以与 XML 兼容。
        【解决方案6】:

        您是否尝试过使用echo htmlspecialchars('They&amp;apos;re here.')

        我想这就是你要找的。​​p>

        【讨论】:

        • 我认为这与我想要的相反。
        猜你喜欢
        • 1970-01-01
        • 2015-05-15
        • 2017-11-23
        • 1970-01-01
        • 2014-08-19
        • 1970-01-01
        • 2013-01-10
        • 1970-01-01
        • 2019-07-31
        相关资源
        最近更新 更多