1

バックエンド Postgresql データベースを備えた Zend Framework に PHP サイトがあります。主な文字エンコーディングは UTF-8 です。

エラーログを確認したところ、奇妙なエントリが見つかりました。私の URL は次のとおりです: www.mydomain.com/schuhe-für-breite-füsse

ただし、誰か (またはボット) が次の URL にアクセスしようとしました: www.mydomain.com/schuhe-f\xc3\xbcr-breite-f\xc3\xbcsse/

上記のようなものは初めて見ました。私のページでは 2 つのことが起こっています: 1) 上記の URL が CMS に対してクエリされます。これは何らかの理由で正常に機能します。データベースでこの SEF URL を見つけようとしたときに、Postgresql がバイト エンコードされていることを再確認し、元に戻すと思います。

2) ページで Ajax リクエストが行われ、同じ SEF URL が渡されます。これは失敗します。スラッシュが Javascript で問題を引き起こしていると思います。

これを避けるために、このようにエンコードされた URL をデコードしたいと思います。ただし、次のコードの簡単なテストでは、何もデコードされませんでした:(

$landing_sef_url = $this->_getParam('landing_sef_url');
$utf8=html_entity_decode($landing_sef_url);
$iso8859=utf8_decode($utf8);
$test3 = html_entity_decode($landing_sef_url, 1, "ISO-8859-1");
$test4 = urldecode($landing_sef_url);

echo utf8_decode("$landing_sef_url");
echo "<br/><br/>";
die($landing_sef_url . " -- $utf8 -- $iso8859 <br/>$test3<br/>$test4");

オンラインのさまざまな投稿で上記を見つけましたが、それらはすべて同じ結果を出力します-schuhe-f\xc3\xbcr-breite-f\xc3\xbcsse

どんな助けでも大歓迎です。どうもありがとう!

4

1 に答える 1

1

このメソッドは、あなたが探していることを行うようです:

http://li.php.net/manual/en/function.stripcslashes.php

しかし、\x## シーケンスをエスケープ解除するだけの場合は、かなり単純な正規表現を使用してこれを行うこともできます。

于 2012-09-12T13:54:44.053 に答える