PHPのurldecode関数を使用してこのURL文字列をデコードしようとしています。
urldecode("Ant%C3%B4nio+Carlos+Jobim");
これは出力することになっています...
'Antônio Carlos Jobim'
...しかし、代わりにこれを出力しています
'Antônio Carlos Jobim'
私は JSベースのオンラインデコーダー で文字列をテストしましたが、大きな成功を収めましたが、このオペレーションサーバー側では実行できないようです。何か案は?
文字列はalso UTF-8でエンコードされています。これは動作します:
echo utf8_decode(urldecode("Ant%C3%B4nio+Carlos+Jobim"));
出力:「アントニオカルロスジョビン」。
実際には、目的の出力が得られますが、UTF-8として解釈されません。これがHTTPアプリケーション上にある場合、クライアントにUTF-8を使用するように指示するヘッダーまたはメタタグ(またはその両方)を送信する必要があります。
編集:例:
// replace text/html with the content type you're using
header('Content-Type: text/html; charset=UTF-8');
私がする時
<?php
echo urldecode("Ant%C3%B4nio+Carlos+Jobim");
?>
ブラウザのように正しく表示されます
アントニオ・カルロス・ジョビン
XAMPPでテストしました
ページにエコーする前にhtmlenteties
も使用していますか?あなたのコードをテストしたとき、それはurldecode("Ant%C3%B4nio+Carlos+Jobim");
部分だけでうまく機能しましたが、htmlentities
を介して実行したとき、あなたと同じ出力を得ました。
UTF-8文字と、PHPがhtmlentities
関数を処理する方法に問題があるようです。
別のオプションは次のとおりです。
<?php
$smthing = 'http%3A%2F%2Fmysite.com';
$smthing = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($smthing));
$smthing = html_entity_decode($smthing,null,'UTF-8');
echo $smthing;
?>
出力は次のようになります:http://mysite.com