3

私はかなりの量の検索を行ってきましたが、これまでのところ、これが既に回答されていることを見つけることができません (ただし、適切に質問していない可能性があります)。

PHP変数に保存されたページに単純なタイトル文字列があります

$title

それを print_r すると、幸せで正常な文字列が返されます

Art's of Glass: Photos From Crystal Castles' Gra

ここが私が失った場所です。この変数で urlencode を実行すると、戻ってきます

urlencode($title);
Art%26%23039%3Bs+of+Glass%3A+Photos+From+Crystal+Castles%26%23039%3B+Gra

最初の 10 文字を見ると、urlencode は本来の機能を果たしていますが、少し余分な機能も備えています。"'" を html エンコーディング (') に変更し、その結果の文字列に対して urlencode を実行しました。

手動でエンコードされた文字列を印刷するとき

urlencode("Art's");
Art%27s

結果は正しく出ます。

私の人生では、最初の例でその余分なステップが発生している理由を理解できません。私はすべてを試しました。エンコードする前に htmlspecialchar_decode -d $title を実行し、可能な限り印刷しました。誰かが光を当てることができれば、起こりうる問題についての提案さえあれば、それはありがたいです. 後で他の変装に現れる可能性があるため、この特定のインスタンスに合わせてソリューションを「調整」する必要は本当に避けたい.

解決策: Quentin と JMB がこれを解決するのを手伝ってくれました。元の文字列は既に HTML エンコードされており、htmlspecialchars_decode($title, ENT_QUOTES) を使用して通常の文字列に変換する必要がありました。

4

4 に答える 4

2

元のデータには、HTML 文字参照が含まれている可能性があります。'

するとprint_r、ブラウザはそれを HTML として解釈し、'.

于 2012-10-25T19:36:09.247 に答える
1

これに対する解決策を見つけました。ここにあります。

<?php
$string = "amir'qureshi";
$postipn3 = urlencode(htmlspecialchars_decode($string, ENT_QUOTES));
//out put will be amir%27qureshi
?>
于 2015-07-29T13:58:52.170 に答える
0

私が通常行うことは次のとおりです。

$string = htmlentities($string);
$string = html_entity_decode($string);

次のこともできます。

$string = htmlentities(base64_encode($string));
$string = html_entity_decode(base64_decode($string));

多分それはそれをやり過ぎですが、私はそれが好きです。

于 2012-10-25T19:22:11.237 に答える
0

このコードを実行すると、次のようになります。

<?php
$title = "Art's of Glass: Photos From Crystal Castles' Gra";
$title = urlencode($title);
print_r($title);
?>

私はこの結果を得ます:

Art%27s+of+Glass%3A+Photos+From+Crystal+Castles%27+Gra

あなたのコードをもっと見ることができますか? あなたが提供したものだけから、なぜその問題が発生しているのかわかりません...

私が使用したphpスニップを使用してみて、同じことができるかどうかを確認してください。もしそうなら、他の誰かが言及したように、それはあなたのphp設定のどこかで間抜けな設定かもしれません.

于 2012-10-25T19:27:25.080 に答える