2011-07-22 10 views
15

私のデータには'を含む多くのHTMLエンティティ(...など)があります。私はちょうどそれに相当する文字に変換したい。'をPHPのアポストロフィに変換する

私はhtmlspecialchars_decode()がうまくいくと仮定しましたが、運がないとします。思考?

私はこの試みた:

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

をしかし、それは返す:They're here.

編集:

を私はまた)(がhtml_entity_decodeを試してみたが、動作していないよう:

echo html_entity_decode('They're here.') 

a lsoは返信します:They're here.

答えて

29

'は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.'); 
+0

私はPHP 5.4.0のための答えを更新しました(小道具は、更新のためeric.itzhakします)。 – cmbuckley

1

あなたが実際に探しているものはhtml_entity_decode()です。

html_entity_decode()は、すべてのエンティティを文字に変換しますが、htmlspecialchars_decode()は、htmlspecialchars()がエンコードする内容のみを逆転します。

EDIT:は私がリンク先のページの例を見て、私はもう少し調査を行なったし、次のように動作しないようです。

[[email protected] ~]$ 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 

それは働いていない理由です。ルックアップテーブルにない理由はまったく別の質問ですが、残念ながら答えられないものがあります。

+0

運:

はこのようにそれを使用してください。 PHPが何らかの理由で '' 'を逆にサポートしていないように思える... Unfortuanatelyは、あなたがあなた自身をロールバックする必要がある場合がありますがhtml_entity_decodeはまだ' – Dave

+0

@Daveを返します。詳細は私の編集を参照してください。 –

+0

そして、 ''は' HTML 4.01の一部ではないので、それはだったようです。 – cmbuckley

-4

echo htmlspecialchars('They&apos;re here.')を試しましたか?

私はそれがあなたが探しているものだと思います。

+2

私はそれが私が欲しいものの反対であると信じています。 – Dave

2

これは動作するはず:、str_replaceを使用せずに、@cbuckleyは正しかった、それはのためにあるため、デフォルト

$value = "They&apos;re here."; 
html_entity_decode(str_replace("&apos;","'",$value)); 
+0

私はあなたの時間を感謝し、これは既に承認された答えと同じです。 – Dave

3

「正しい」方法がありますhtml_entity_decodeはHTML 4.01ですが、あなたはそれをデコードしますHTML 5のパラメータを設定することができます。

html_entity_decode($str,ENT_QUOTES | ENT_HTML5) 
関連する問題