将 ' 转换为 PHP 中的撇号
Posted
技术标签:
【中文标题】将 \' 转换为 PHP 中的撇号【英文标题】: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.
【问题讨论】:
【参考方案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_decode
和 htmlspecialchars_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[''']);
PHP Notice: Undefined index: ' in - on line 3
NULL
这就是它不起作用的原因。为什么它不在查找表中完全是另一个问题,很遗憾我无法回答。
【讨论】:
@Dave:不幸的是,您可能需要自己动手......似乎 PHP 不支持反转&apos;
出于某种原因。有关更多信息,请参阅我的编辑。
这似乎是因为&apos;
不是 HTML 4.01 的一部分。
@cbuckley 听起来像是一个可能的原因。 &apos;
被拉入 XHTML 以与 XML 兼容。【参考方案6】:
您是否尝试过使用echo htmlspecialchars('They&apos;re here.')
?
我想这就是你要找的。p>
【讨论】:
我认为这与我想要的相反。以上是关于将 ' 转换为 PHP 中的撇号的主要内容,如果未能解决你的问题,请参考以下文章