我的数据中包含许多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.
答案 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_decode
和htmlspecialchars_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[''']);
PHP Notice: Undefined index: ' in - on line 3
NULL
这就是它无法正常工作的原因。为什么它不在查找表中完全是另一个问题,不幸的是我无法回答。
答案 5 :(得分:-4)
您是否尝试过使用echo htmlspecialchars('They're here.')
?
我认为这就是你要找的东西。