ホームページ >バックエンド開発 >PHPチュートリアル >トランスコーディングの問題

トランスコーディングの問題

WBOY
WBOYオリジナル
2016-06-23 14:21:351121ブラウズ

mb_convert_encoding(addslashes($u[16]), 'UTF-8','ISO-8859-15,shift-jis,eucjp-win,sjis-win,ISO-8859-1,UTF-8')


このトランスコーディングは最初のものにのみ有効です。たとえば、最初のものは ISO-8859-15 です。ただし、日本語エンコードは変換できません。 sjis-win これらの日本語エンコードは転送できますが、西欧エンコードは転送できません。

この状況にどう対処しますか? ? ?


ディスカッションへの返信(解決策)

ご指定いただいた文字セットリストの内部コードは重複しており、一意に識別できません

このため、mb_stringの開発者は、1つずつ判断できるmb_check_encoding関数を提供しています

mb モジュールがそこまでインテリジェントだとは思わないでください

意味解析がなければ、コンピュータは iso-8859-1 と SHIFT-JIS を区別できないと思います

理由は分かります、各文字に日本語が含まれているからです西ヨーロッパのエンコーディングなので、最初のエンコーディングはすべて有効です


親愛なる友人、私のような状況を解決する方法

以下は、ヨーロッパの
urbanizaci? camino de vi?les calle rio aragon n9 pinseque です

以下は、日本語
「???iPhone5/4S/4???????????」って一文字ずつ判定してたら処理に時間がかかるんじゃない? ? ?


urbanizaci? camino de vi?les calle rio aragon n9 pinseque

GBK エンコーディングだと言ったら、この声明を受け入れられますか?



$s = "???????? iPhone5/4S/4? ?? ?? ?????????? ?????? ??????? ";echo mb_detect_encoding($s, "ASCII,JIS,UTF-8,EUC-JP,SJIS");echo mb_convert_encoding($s, 'utf-8', 'SJIS'), PHP_EOL;$d = explode(',', 'shift-jis,eucjp-win,sjis-win,utf-8,jis,sjis,euc-jp,gbk');foreach($d as $t)  var_dump($t, mb_check_encoding($s, $t));
SJISセカンドショップ iPhone5/4S/4 修理・分解ツール スター型 スクレイパ? 台座ホルダー
string(9) "shift-jis"
bool(true)

string(9) "eucjp-win"

bool(false)
string(8) "sjis-win"
bool(true)
string(5) "utf-8"
bool(false)
string(3) "jis"
bool(false)
string ( 4) "sjis"
bool(true)
string(6) "euc-jp"
bool(false)
string(3) "gbk"
bool(true)


状況を混乱させてください、笑
rree
ISO-8859-1都市間カミノ デ ビニャーレス コール リオ アラゴン n9 ピンシーケンス

string(9) "shift-jis"

bool(false)
string(9) "eucjp-win"
bool(false)
string(8) " sjis-win"
bool(true)
string(5) "utf-8"
bool(false)
string(3) "jis"
bool(false)
string(4) "sjis"
bool(false)
string(6) "euc-jp"
bool(false)
string(3) "gbk"
bool( true)
string(6) "euc-kr"
bool( true)
string(10) "iso -8859-1"
bool(true)

LZ を攻撃するつもりはありません。ただ 1 点だけ指摘したいのですが、プログラムを書くときは注意が必要です。できることだけを実行し、実行しないようにしてください。結局のところ、それを使用する人はあなたを信頼しています

BOM の指示がなければ、文字列の文字セットを識別することは非常に困難です。文字列に 2 つの文字セットの違いが含まれている場合にのみ可能です。そして、紐は十分な長さでなければなりません


上の 2 人、ありがとう。

説明させていただきますが、これらは処理対象のデータであり、さまざまな国の Web サイトからダウンロードした生データです。

あなたのコードを通して、1 つまたは 2 つの関数だけに依存すると、処理する必要があるデータを適切に識別できない可能性があると思います。

そこで私は次善策を使用します。国というフィールドがあり、対応する文字列を国に応じて変換します。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。