web-dev-qa-db-ja.com

URLデコードPHP

PHPのurldecode関数を使用してこのURL文字列をデコードしようとしています。

urldecode("Ant%C3%B4nio+Carlos+Jobim");

これは出力することになっています...

'Antônio Carlos Jobim'

...しかし、代わりにこれを出力しています

'Antônio Carlos Jobim'

私は JSベースのオンラインデコーダー で文字列をテストしましたが、大きな成功を収めましたが、このオペレーションサーバー側では実行できないようです。何か案は?

32
Brandon Jackson

文字列はalso UTF-8でエンコードされています。これは動作します:

echo utf8_decode(urldecode("Ant%C3%B4nio+Carlos+Jobim"));

出力:「アントニオカルロスジョビン」。

64

実際には、目的の出力が得られますが、UTF-8として解釈されません。これがHTTPアプリケーション上にある場合、クライアントにUTF-8を使用するように指示するヘッダーまたはメタタグ(またはその両方)を送信する必要があります。

編集:例:

// replace text/html with the content type you're using
header('Content-Type: text/html; charset=UTF-8');
13
Ignas R

私がする時

<?php
echo urldecode("Ant%C3%B4nio+Carlos+Jobim");
?>

ブラウザのように正しく表示されます

アントニオ・カルロス・ジョビン

XAMPPでテストしました

2
YOU

ページにエコーする前にhtmlentetiesも使用していますか?あなたのコードをテストしたとき、それはurldecode("Ant%C3%B4nio+Carlos+Jobim");部分だけでうまく機能しましたが、htmlentitiesを介して実行したとき、あなたと同じ出力を得ました。

UTF-8文字と、PHPがhtmlentities関数を処理する方法に問題があるようです。

1
Doug Neiner

別のオプションは次のとおりです。

<?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

0
T.Todua