在PHP中将'转换为撇号

28

我的数据中包含许多HTML实体(• ...等),包括 '。我只想将它转换为其字符等效项。

我以为使用htmlspecialchars_decode()可以解决问题,但是-没有成功。有什么想法吗?

我尝试了这个:

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

但是它返回:They're here.

编辑:

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

echo html_entity_decode('They're here.')

也会返回:They're here.

6个回答

50

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

在 PHP 5.4.0 中,引入了额外的标志 来处理不同语言,其中每个语言都包括 ' 作为实体。

这意味着您可以像这样做:

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的更新)。 - cmbuckley

8

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

像这样使用:

html_entity_decode($str,ENT_QUOTES | ENT_HTML5)

4

3
这应该可以正常工作:
$value = "They're here.";
html_entity_decode(str_replace("'","'",$value));

我很感激您的时间,但这与已经批准的答案相同。 - Dave

2
你实际上要找的是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 不支持反转 &apos; 的原因。请参见我的编辑以获取更多信息。 - Matthew Scharley
而且似乎是因为&apos;不是HTML 4.01的一部分。 - cmbuckley
@cbuckley听起来似乎是个很可能的原因。&apos;被引入XHTML是为了与XML兼容。 - Matthew Scharley

-4

你尝试过使用echo htmlspecialchars('They&apos;re here.')吗?

我认为这就是你要找的。


2
我相信那正好是我想要的相反情况。 - Dave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接