0

これは UTF-8 でエンコードされたソース ファイルです。明らかな何かが欠けているに違いありませんが、考えられるすべての順列を試しました。

<?php

$bad =  array( chr(130), chr(145), chr(146), chr(147), chr(148), chr(150), chr(151), chr(173), chr(160) );
$good = array( chr( 44), chr( 39), chr( 39), chr( 34), chr( 34), chr( 45), chr( 45), chr( 45), chr( 32) );

print_r($bad);
print_r($good);

 $str = <<<EOF
    bad comma ‚
    bad quote ‘
    bad quote ’
    bad quote “
    bad quote ”
    bad dash –
    bad dash —
    bad dash ­
    bad space   

EOF;
    echo $str;
    $clean = str_replace($bad, $good, $str);
    echo "\n";
    echo( $clean);

そして、ブラウザで開いてソースを表示すると...

Array
(
    [0] => ‚
    [1] => ‘
    [2] => ’
    [3] => “
    [4] => ”
    [5] => –
    [6] => —
    [7] => ­
    [8] =>  
)
Array
(
    [0] => ,
    [1] => '
    [2] => '
    [3] => "
    [4] => "
    [5] => -
    [6] => -
    [7] => -
    [8] =>  
)
    bad comma ‚
    bad quote ‘
    bad quote ’
    bad quote “
    bad quote â€
    bad dash –
    bad dash —
    bad dash ­
    bad space   

    bad comma ‚
    bad quote ‘
    bad quote ’
    bad quote “
    bad quote â€
    bad dash â€"
    bad dash â€"
    bad dash Â-
    bad space   
4

1 に答える 1

1

ASCII、マルチバイト、および UTF-8 には違いがあります。

あなたの場合、それらの文字はマルチバイト文字です。「マルチバイト」は、任意の非 UTF-8 エンコーディングです。

最初にそれらを UTF-8 に変換するか、mb_ereg_replaceを使用することができます

ほとんどの PHP 開発者は文字エンコーディングについてあまり知りませんが、C/C++ で作業する際に最も重要なことの 1 つです。

于 2012-10-30T14:25:16.317 に答える