在PHP中将'转换为撇号

时间:2011-07-22 14:11:02

标签: php html special-characters decode

我的数据中包含许多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 个答案:

答案 0 :(得分:31)

由于'不是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.');

答案 1 :(得分:4)

'实体和很多其他实体不在html_entity_decodehtmlspecialchars_decode函数使用的PHP转换表中。不幸的是。

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

答案 2 :(得分:4)

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

像这样使用:

html_entity_decode($str,ENT_QUOTES | ENT_HTML5)

答案 3 :(得分:2)

这应该有效:

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

答案 4 :(得分:1)

您实际需要的是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

这就是它无法正常工作的原因。为什么它不在查找表中完全是另一个问题,不幸的是我无法回答。

答案 5 :(得分:-4)

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

我认为这就是你要找的东西。