2

例えば。入力:

リフェリメント-ア-9-90

出力:

リフェリメントアー%E2%82%AC-9-90

助けてください、事前に感謝します。

4

1 に答える 1

3

ISO-8859-1 文字列をトリプレット/パーセンテージ エンコーディングに変換するには、次を使用しますrawurlencode

$encoded = rawurlencode($str);

ただし、質問に貼り付けた文字列は、BPH印刷できない文字である (Break Permitted Here) 制御文字が含まれている場合、ISO-8859-1 でエンコードされていません。トリプレット/16 進数でエンコードされた文字列と同様に、次の PHP 表記もバイナリセーフです。

$str = "Riferimento-a-\xE2\x82\xAC-9-90";

これを UTF-8 でエンコードされた文字列として取得すると、次のようになります。

Riferimento-a-€-9-90

%E2%82%ACEURO SIGN (U+20AC) の urlencoded UTF-8 エンコーディングです。

これはおそらくあなたが探しているものです。

大まかに関連: PHP を使用して String 内の非 SGML 文字を置き換える方法は?


あなたはコメントでさらに尋ねました:

に変換する方法è%hex?

è( ) が関係していないèので、ここで何を尋ねているのかよくわからないと思います。しかし、私はあなたが最初に尋ねることから始めます。それは最も単純だからです。これは 2 段階のプロセスです。

render?grid=%2B--------%2B+++%2B--------%2B------%2B+++%2B-----%2B-- ----%2B+++%2B---%2B----%2B%0D%0A%7C+cFDA+++%7C+++%7C+デコード+++++++++++%7C+++%7C+エンコード+++++%7C+++%7C+cFDA+++%7C%0D% 0A%7C+エンティティ+%2B--%3E%2B------%2B--%3E%2B----------- -%2B--%3E%2B+Entity+%7C%0D%0A%7C+%26Name%3B+%7C+++%7Chtml_entity_decode%7C+++%7Crawurlencode%7C+++%7C+%25HEX+++%7C%0D%0A%7C+++++%7Bd%7D% 7C+++%7C++cDBF++++++++++++%7C++++%7C++c1AB++++++%7C+++%7C+++++%7Bd%7D%7C%0D%0A%2B--------%2B+++%2B--------% 2B---------%2B+++%2B-----%2B------%2B+++%2B--------%2B&スケール=1&バックグラウンド=FFFFFF&E=オン&タイムアウト=10

最初に、名前付き HTML エンティティをターゲット文字エンコーディングの標準文字に変換します。

$entity = 'è';
$iso_8859_1 = html_entity_decode($entity, NULL, 'ISO-8859-1');

次に、より一般的には urlencoding と呼ばれる「%hex」エンコーディングに変換します。

$hex = rawurlencode($iso_8859_1);

そして、それは基本的にそれです。ターゲット エンコーディングに存在しないエンティティを変換しようとすると、変換されないため、文字エンコーディングに関係なく情報が保持されます。

ただし、これらの変換を実行するだけでなく、他にも問題があるため、これは参考になるだけだと思います。

phpmyadminでは、と表示されますが"Riferimento-a-€-9-90"、変換したいです"Riferimento-a-%E2%82%AC-9-90"

表示されているものが実際にテキストでどのように表現されているかは共有されていませんが、名前付きの HTML エンティティ (例: ) について尋ねられたため、具体的には次の部分èについて懸念していると思います。€ / %E2%82%A

â    %E2    Windows-1252    LATIN SMALL LETTER A WITH CIRCUMFLEX (U+00E2)
‚    %82    Windows-1252    SINGLE LOW-9 QUOTATION MARK (U+201A)
¬    %AC    Windows-1252    NOT SIGN (U+00AC)

これらの文字について ISO-8859-1 について提供された情報は間違っています。ISO-8859-1‚ / %82には存在せず、その場所に C1 セット制御コードがあるためです。だから私はそれがHTML 文書で一般的Windows-1252だと思います。

データベースからデータを受け取ると書いたように、データベースにある UTF-8 テキストを phpmyadmin が Windows-1252 として表示すると仮定します。

MySQL      : UTF-8:         \xE2\x82\xAC (€)    
PHPMyAdmin : Windows-1252:  \xE2\x82\xAC (€)

データベースから UTF-8 でエンコードされたデータrawurlencodeを取得した場合は、それを実行するだけで、必要な 16 進エンコードを取得できます。

于 2012-04-12T16:01:10.870 に答える