6

RETS サーバーからデータを取得するために librets を使用しています。librets Encoding メソッドが機能せず、出力に奇妙な文字が表示されます。''' のような文字が ’ に置き換えられていることに気付きました。libret の修正が見つからないため、データをダウンロードした後で、そのようなガベージ文字を実際の値に置き換えることにしました。必要なのは、そのようなガベージ文字列とそれに相当する文字のリストです。これをグーグルで検索しましたが、リソースが見つかりませんでした。そのようなガベージ文字とその実際の値のリスト、またはそのような文字を生成できるコードを教えてください。

ありがとう

4

2 に答える 2

11
于 2012-08-19T06:48:15.863 に答える
0

質問のリマインダー:

「... ''' のような文字が ... に置き換えられていることに気付きました...データをダウンロードした後、そのようなガベージ文字を実際の値に置き換えることにしました。必要なのは、そのようなガベージ文字列とそれに相当する文字のリストです。」

この部分を厳密に扱う:

「私が必要としているのは、そのようなガベージ文字列とそれに相当する文字のリストです。」

php を使用すると、これらの文字とその等価物を生成できます。1,111,998 の Unicode ポイントまたは 109,449 の Utf8 シンボルをすべて処理するのは現実的ではありません。次のループで € と Ă の間、またはコンテキストにより関連する別の範囲で ASCII 範囲を使用できます。

<?php
  for ($i=128; $i<258; $i++)
    $tmp1 .= "<tr><td>".htmlentities("&#$i;")."</td><td>".html_entity_decode("&#".$i.";",ENT_NOQUOTES,"utf-8")."</td><td>&#".$i.";</td></tr>";

  echo "<table border=1>
    <tr><td>&#</td><td>&quot;Garbage&quot;</td><td>symbol</td></tr>";
    echo $tmp1;
  echo "</table>";
?>

経験上、ASCII コンテキストでは、ほとんどの「ガベージ」シンボルは € から ā + (まれに) ῁ から ‶ の範囲で発生します。

「ガベージ」シンボルを表示するには、html ページの文字セットを iso-1 または最初に問題を引き起こしたその他の文字セットに設定する必要があります。文字セットが utf-8 に設定されている場合は表示されません。

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

.

「データをダウンロードした後、そのようなガベージ文字を実際の値に置き換えることにしました」

php utf8_decode() で「ガベージ」を元に戻すことはできません。実際には、既に「ガベージ」にさらに「ガベージ」が作成されます。ただし、単純で高速な検索と置換 php の str_replace() 関数を使用できます。

まず、置き換えたい「ガベージ」シンボルのセットごとに 2 つの配列を生成します。最初の配列は検索語です。

<?php
  //ISO 8859-1 (Latin-1) special chars are found in the range 128 to 257
  $tmp1 = "\$SearchArr = array(";
  for ($i=128; $i<258; $i++)
    $tmp1 .= "\"".html_entity_decode("&#".$i.";",ENT_NOQUOTES,"utf-8")."\", ";
  $tmp1 = substr($tmp1,0,strlen($tmp1)-2);//erases last comma
  $tmp1 .= ");";
  $tmp1 = htmlentities($tmp1,ENT_NOQUOTES,"utf-8");
?>

2 番目の配列は置換項です。

<?php
  //Adapt for your relevant range.
  $tmp2 = "\$ReplaceArr = array(\n";
  for ($i=128; $i<258; $i++)
    $tmp2 .= "\"&#".$i.";\", ";
  $tmp2 = substr($tmp2,0,strlen($tmp2)-2);//erases last comma
  $tmp2 .= ");";

  echo $tmp1."\n<br><br>\n";
  echo $tmp2."\n";
?>

これで、コピーして貼り付けて使用および再利用して、感染した文字列を次のように駆除できる 2 つの配列が得られました。

$InfectedString = str_replace($SearchArr,$ReplaceArr,$InfectedString);

注: utf8_decode() は、「ガベージ」シンボルのクリーンアップには役に立ちません。しかし、さらなる汚染を防ぐために使用することができます。別の方法として、mb_ 関数が役立ちます。

于 2013-11-01T02:02:03.490 に答える