0

過去 10 時間インターネットで答えを探した結果、解決できない問題が発生しています。

この形式のデータがあります

??E?�?0?�?<?20120529184453+0200?20120529184453+0200?�?�?G0E?5?=20111213T103134000-136.225.6.103-30365316-1448169323, ver: 12?�?W??tP?2?�?
??|?????
??:o?????tP?�??B@?????B@????�?�?)0?�???
49471010550?�??	???tP???3??<?�?�?�?�??�?�?�?�?�??�?�?�?�?�

私が書いたものではない PHP コードがありますが、これは html_entity_decode を実行しているだけで、正しい結果が返されます。

Perl の decode_entities を実行しようとすると、まったく異なる結果が得られます。�いくつかのデバッグの後、PHPは無効なエンティティと思われるものを「適切に」置き換えているように思えます。

一方、Perl はこれらの「無効な」エンティティをデコードしていないようで、それらをそのままにしておくと、後で結果が台無しになります (これは unpack を通過するか、phph の場合は bin2hex を通過します。null を 00 に unpack するのではなく、の個々の文字を展開します�)。

decode_entities を実行した後に perl で次の置換を実行するなど、考えられるすべてのことを試しました

    $var =~ s/&#(\d+);/chr($1)/g

しかし、それはまったく機能しません。

これは私を怒らせており、これを php ではなく perl で実行したいと考えています。考えられるすべてのエンティティと数値をカバーするために、perl で 1000 行のパターン マッチング行を記述する必要がないことを本当に願っています。

PHP の html_entity_decode 関数全体を perl に解析したり、パターン マッチングの無限の行を記述したりすることなく、この問題に対処する方法を知っている人はいますか?

4

1 に答える 1

2

あなたはほとんどそこにいます。それ以外の

$var =~ s/&#(\d+);/chr($1)/g

いう

$var =~ s/&#(\d+);/chr($1)/ge

この/e修飾子は、置換パターンを「e」評価するように Perl に指示します。

于 2012-05-29T20:18:49.783 に答える