1

エンコーディングに問題があります。私が欲しい出力は次のとおりです。

string(17) "New & old"

これは、二重引用符を使用している場合の出力でもあります。

これは私のコードです。別の関数の出力であるため、一重引用符を変更できません。

$string = 'New \x26amp\x3Bamp\x3B old';
$string = iconv('ASCII', 'UTF-8//IGNORE', $string);
var_dump($string);

これは私の出力です:

string(26) "New \x26amp\x3Bamp\x3B old"

では、一重引用符を使用するときにこの動作を変更するにはどうすればよいですか。文字列を一重引用符から二重引用符に変換できますか?

4

1 に答える 1

2

これを行う1つの方法は次のとおりです。

$str = preg_replace_callback('/\\\x([0-9A-F]{2})/', function ($m) {
    return pack('H*', $m[1]);
}, $str);

これは、16進表記をそれが表す実際のバイトに置き換えています。Unicodeとはあまり関係がありません。

于 2012-04-24T11:32:52.343 に答える