web-dev-qa-db-ja.com

PHPのhtml_entity_decodeの問題?

HTMLエンティティをソース文字列から同等のリテラル文字に変換しようとしています。

例えば:

<?php

$string = "Hello &#8211; World";
$converted = html_entity_decode($string);

?>

これにより画面上のエンティティが正しく変換されますが、HTMLコードを見ると、明示的なエンティティがまだ表示されています。 HTMLページ内で文字列を使用していないので、文字通りエンティティを変換するように変更する必要があります。

私が間違っていることについてのアイデアはありますか?

参考までに、変換した文字列をAppleのプッシュ通知サービスに送信しています。

$payload['aps'] = array('alert' => $converted, 'badge' => 1, 'sound' => 'default');
$payload = json_encode($payload);
17
mootymoots

&#8211;はUTF-8文字(emダッシュ)にマップされるため、文字エンコードとしてUTF-8を指定する必要があります。

$converted = html_entity_decode($string, ENT_COMPAT, 'UTF-8');
35
BoltClock

文字セットを使用してみてください

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
<?php
$string = "Hello &#8211; World";
$converted = html_entity_decode($string , ENT_COMPAT, 'UTF-8');
echo $converted;
?>

これは動作するはずですそしてソースでも変換されるべきです

4
mr.Shu