1

»タイトルが示すように、PHP を使用して文字を html エンティティに変換しようとしています。これは最終的な解決策ではありませんが、他のいくつかの主要な変更が完了する前に、これを簡単な修正として行う必要があります。

次のコードでテストしようとしていますが、思ったように動作しません。

<form action="test.php" method="post">
    <input type="text" name="test" />
    <input type="submit" value="Go" />
</form>

<?php
if (isset($_POST['test'])){
    $converted = preg_replace('/\xbb/', '&raquo;', $_POST['test']);
    echo '<div>Original: '.$_POST['test'].'</div>';
    echo '<div>Converted: '. $converted.'</div>';
}
?>

&raquo;変換されたものは正しいようですが、Firefox のビュー ソースでは ? として表示される の前に余分な文字が表示されます。しかし、それが実際に何であるか、なぜそこにあるのかはわかりません。

誰か助けてください。ありがとうございました。

4

3 に答える 3

0

»Unicodeの文字は16 進数で表されます00bb。正規表現は 2 番目のバイトのみに一致するため、まだ null バイトが残っています。これはうまくいきます:

$converted = preg_replace('/\x00\xbb/', '&raquo;', $_POST['test']);

または、特に Unicode 文字に一致させることを意図した別の修飾子を使用することもできますが、私は PHP についてよく知らないので、何がうまくいくか自信を持って言えません。

于 2012-10-23T11:59:59.023 に答える
0

»c2 bbUTF-8 ですがbb、ISO-8859-1 です。

UTF-8 でエンコードされていないページでこれを出力すると、次のように表示されます。

» or 
�»

おそらく、文字は UTF-8 として投稿されています。これは、2 番目のバイトが置き換えられていることを意味しますが、最初のバイトは残っているため、最終的にc2&raquo;

試す

$converted = preg_replace('/\xbb/u', '&raquo;', $var);

また

$converted = preg_replace('/\xc2\xbb/', '&raquo;', $var);
于 2012-10-23T12:00:33.980 に答える
0

u修飾子を追加します。

$converted = preg_replace('/\xbb/u', '&raquo;', $_POST['test']);
于 2012-10-23T11:53:23.100 に答える