2011-02-03 7 views
3

私は単純な文字をエンコードするPHPでurlencodeまたはrawurlencodeを使用したときに§(段落)を得ました。 "%C2%A7"という結果が得られました。PHPのrawurlencodeがJavaScriptsのエスケープと等しくない!どうして?

しかし、その文字をエンコードするためにJavascriptでエスケープを使用すると、「%A7」しか得られません。

この場合、PHPを実行しているサーバーとJavaScriptクライアントがajax/jqueryを介してデータを取得しようとするときに、データの送受信にエンコードの問題があります。

私が望むどんなタイプのテキストも書くことができるようにしたい。このために、私はテキストをエンコードし、バックエンドのPHPスクリプトに送信し、データをエスケープして送信します。私はそれを取得するとき、PHP側で私はmysqlからデータを取得し、rawurlencodeを行い、それを返信します。

両サイドは、UTF-8モードで動作します。 jquery ajax関数が"contentType: application/x-www-form-urlencoded:charset=UTF-8"で呼び出され、mysqlサーバがクライアントとサーバの両方でUTF-8に設定され、PHPスクリプトがエコーバックを開始します。header("application/x-www-form-urlencoded:charset=UTF-8");

PHPがJavaScriptを生成する%C2のものを生成するのはなぜですか?側。

Coult somebody help?

+0

[PHPドキュメント](http://php.net/manual/en/function.urlencode.php)を見ると、omid [同じ問題があった]というユーザーが表示されます(http://www.php。 net/manual/en/function.urlencode.php#96394)。興味深いもの: –

答えて

3

私はしばらく前に同じ問題を抱えていたし、解決策が見つかりました:

function rawurlencode (str) { 
    str = (str+'').toString();   
    return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28'). 
                        replace(/\)/g, '%29').replace(/\*/g, '%2A'); 
} 

コードはここから取られる - http://phpjs.org/functions/rawurlencode:501 はそれがお役に立てば幸いです。

+0

その情報をありがとう。しかし、これはJavaScriptの側です。データが正しく私のmysqlのDBに格納されているので、javascriptの面は大丈夫です。私のPHP側からそれを取得することが問題です。だから私はPHPで§ – NovumCoder

+0

ああ、右のエンコーディングを得るために何かが必要です、ちょうどそれを持っています。私は、encodeURIComponentとdecodeURIComponentを使用する必要があります。その後、javascriptとphpの間でエンコードとデコードが正常に動作します。あなたのrawurlencodeは正しいものです、Radoslavに感謝します。 – NovumCoder

3

それは明らかに文字セットの問題です:

[[email protected]:~]> php -r 'echo rawurlencode(utf8_encode("§"));' 
%C2%A7 
[[email protected]:~]> php -r 'echo rawurlencode("§");' 
%A7 

あなたのPHPコード内のリテラル§を持っている場合

PHPファイルがあることを確認してください(端末が明らかにUTF8モードで実行されていません) UTF8として保存されます。

+0

だからあなたの場合はrawurlencode( "§"); %A7のみが返されました。しかし、私の場合、私は%C2%A7を取得します。そして、これは私のPHPファイルエンコーディングから来ていると思います。ファイルのエンコードをチェックするにはどうすればいいですか?事は私の端末でさえ私は%C2%A7を取得しています。それで私の端末はutf8ではないのですか?どのように私はその純粋なutf8を確認することができます。私の端末エンコーディングはutf-8に設定されています。 – NovumCoder

+0

こんにちは、私はこれをしました:php -r 'echoururencode(utf8_decode( "§"));' そして、%A7だけが返されました。どういう意味ですか? – NovumCoder

+0

%C2%A7を取得した場合はUTF8です。そうでなければ%A7を得ます。 vimを使っているなら、 ':set fenc = utf8'(またはlatin1)を使ってファイルのエンコーディングを設定することができます – ThiefMaster

関連する問題