URL-кодирование с использованием HTML-форм - PullRequest
0 голосов
/ 30 января 2012

Как кодировать URL-адреса, содержащие Unicode? Я хотел бы передать его в утилиту командной строки, и мне нужно сначала ее кодировать.

<form action="index.php" method="get" >
<input type="text" name="find" value="عربي" /><br />
<input type="submit" value="search" />
<form />

Пример: http://localhost/index.php?find=عربي

становится http://localhost/index.php?find=%DA%D1%C8%ED

Ответы [ 2 ]

2 голосов
/ 30 января 2012
$ cat testme
#!/usr/local/bin/php
<?php

$chars = array( "d8", "b9", "d8", "b1", "d8", "a8", "d9", "8a" );

foreach ($chars as $one) {
    $string .= sprintf("%c", hexdec($one));
}

print "String: " . $string . "\n";
print "Encoded: " . urlencode($string) . "\n";

?>
$ ./testme
String: عربي
Encoded: %D8%B9%D8%B1%D8%A8%D9%8A
$ 
1 голос
/ 30 января 2012

%DA%D1%C8%ED - это не последовательность Unicode, а последовательность в кодировке URL в другой кодировке.عربي в Юникоде после того, как кодировка URL должна стать %D8%B9%D8%B1%D8%A8%D9%8A

Если вы хотите создать действительный URL с символами Юникода, вы можете использовать что-то вроде:

$url = 'http://localhost/index.php?find=عربي';

$url_parts = parse_url($url);
$query_parts = array();
parse_str($url_parts['query'], $query_parts);
$query = http_build_query(array_map('rawurlencode', $query_parts));

$url_parts['query'] = $query;
$encoded_url = http_build_url($url_parts);

Примечание: это будет кодировать толькоquery часть URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...