0

アトム形式の日付を必要とする Google カレンダーのクエリ文字列を作成しています。

私はphp 5.1.6とdate(DATE_ATOM)を使用して、正しくフォーマットされた現在の日付を生成しています。したがって、たとえば、クエリのエンコードされていない URL 部分には次のものがあります。

start-max=2010-09-02T10:25:58+01:00

これをrawurlencodeする必要があり、それは次のようになります

start-max%3D2010-09-02T11%253A37%253A59%252B01%253A00 

これを rawurldecode すると、次のようになります

start-max=2010-09-02T11%3A39%3A35%2B01%3A00

そのため、適切にデコードされておらず、Google はクエリを拒否しています...

クエリを 2 回 rawurldecode すると、日付はデコードされますが、元の '+' はスペースに置き換えられます (上記の文字列ではまだエンコードされていますが)。

同じことが urlencode/urldecode にも当てはまります:(

この日付形式で URL をエンコード/デコードする方法はありますか?

乾杯

4

3 に答える 3

0

=クエリ文字列で -symbol をエンコードしてはなりません。パラメーター値自体とパラメーター名 (固定されておらず、問題のある文字が含まれている可能性がある場合) のみをurlencoded にする必要があります。正しい方法は

$query = 'start-max='.urlencode(date(DATE_ATOM));
// or if the parameter name could be problematic
$query = urlencode('start-max').'='.urlencode(date(DATE_ATOM));
于 2010-09-02T10:58:26.693 に答える
0

再現できません:

$ php -r 'echo rawurlencode("start-max=2010-09-02T10:25:58+01:00").PHP_EOL;'
start-max%3D2010-09-02T10%3A25%3A58%2B01%3A00
$ php -r 'echo rawurlencode(rawurlencode("start-max=2010-09-02T10:25:58+01:00")).PHP_EOL;'
start-max%253D2010-09-02T10%253A25%253A58%252B01%253A00

$ php -r 'echo rawurldecode(rawurlencode("start-max=2010-09-02T10:25:58+01:00")).PHP_EOL;'
start-max=2010-09-02T10:25:58+01:00
$ php -r 'echo urldecode(urlencode("start-max=2010-09-02T10:25:58+01:00")).PHP_EOL;'
start-max=2010-09-02T10:25:58+01:00

したがって、おそらく値をrawurlencodeしてから、文字列全体をコード化しています。

$ php -r 'echo rawurlencode("start-max=".rawurlencode("2010-09-02T10:25:58+01:00")).PHP_EOL;'
start-max%3D2010-09-02T10%253A25%253A58%252B01%253A00

... get 変数で完全な URL を送信している場合、これは望ましい動作になる可能性がありますが、どこかに論理エラーがある可能性が高くなります。

于 2010-09-02T11:04:47.267 に答える
0

PHP を使用しますhttp_build_query

$BaseURL = 'http://example.com/page.php';
$Query   = http_build_query(array(
    'start-max'=>'2010-09-02T10:25:58+01:00',
    'param2'=>'anotherval',
));

$URL = $BaseURL. '?'. $Query;
于 2010-09-02T11:07:50.777 に答える