0

一連のレコードを xml にエクスポートしてから、xslt 変換を介して xliff にエクスポートしています。エクスポートは正常に機能しますが、エクスポート ファイルの一部の文字を変換できません。ここにいくつかのステップバイステップの詳細があります:

ステップ 1. ユーザー入力に文字列が混在する (例: 次の文字列) Autocomplete On' see the wrong character ==> í

Mysql db/table フィールドのエンコーディングは utf8 に設定されています。

  `unicode longtext COLLATE utf8_unicode_ci`

上記のテキストを格納します。

ステップ 2. html スニペットがエクスポート目的で生成されます。

<html version="1.2">
    <table>
        <tr>
            <td id="Autocomplete_On">Autocomplete On' see the wrong character ==&#62; í</td>
        </tr>
    </table>
    </html>

ステップ 3.xml に変換する

  <?xml version="1.0" standalone="yes"?>
     <html version="1.2"><body><table><tr><td id="Autocomplete_On">
        Autocomplete On' see the wrong character ==&gt; &#xC3;&#xAD;</td>
</tr></table></body></html>

ステップ 4: xslt を使用して変換します。

(出力の必要な部分のみを貼り付けました。ブラウザで表示すると、実際の文字はÃファイルに表示されますが、これが表示されます)

 <body>
      <group id="id796986axmarkhtml-0">
        <group id="id533787bxmarkbody-1">
          <group id="id533788bxmarktable-2">
            <group id="id533790bxmarktr-3">
              <trans-unit id="td-4">
                <source>Autocomplete On' see the wrong character ==&gt; í</source>
                <target>Autocomplete On' see the wrong character ==&gt; í</target>
              </trans-unit>
            </group>
          </group>
        </group>
      </group>
    </body>

実際のコード:

  private function xml2xliff($htmlStr,$source,$target){
        $xml=new \DOMDocument();
        //hacky way to tidy html
        @$xml->loadHTML($htmlStr);//step 3
        $xsl = new \DOMDocument;
        $xsl->load(__DIR__.'/xliff/xsl/xml2xliff.xsl');
        $proc = new \XSLTProcessor();
        $proc->ImportStyleSheet($xsl);
        $proc->setParameter('', 'source', $this->getIsoName($source));
        $proc->setParameter('', 'target', $this->getIsoName($target));
        return $proc->transformToXML($xml); //step 4
    }

$htmlStr はステップ 2 で生成された HTML スニペットです。

問題は、文字列が 2 回変換されることです。検討中の実際のキャラクターは

ステップ1。í

ステップ 2. まだí

ステップ 3. √ie に変換 &#xC3;&#xAD;

ステップ 4. に変換í

もう一つの例:

入力。Autocomplete On They’re gone now

xml 出力。Autocomplete On Theyâre gone now

4

1 に答える 1