Прежде всего, если вы находитесь в & lt; 5.3PHP, то нет. У тебя много проблем, чтобы справиться.
Я удивлен, что никто не упомянул библиотеку intl , которая имеет хорошую поддержку для unicode, графем, строковых операций, локализации и многих других, см. ниже.
Я приведу некоторую информацию о поддержке Unicode в PHP с помощью слайдов Elizabeth Smith в PHPBenelux'14 Хорошо: Плохо : Я обновлю этот ответ, если что-то изменит добавленные функции и так далее. INTL
mb_string
ICONV
stream_filter_append($fp, 'convert.iconv.ISO-2022-JP/EUC-JP')
БАЗЫ ДАННЫХ
Некоторые другие Gotchas
Вы не можете так поступать. num может быть не более 10. См.
https://developers.google.com/custom-search/v1/using_rest#query-params
< blockquote>num Количество результатов поиска для возврата Вы можете указать, сколько результатов будет возвращено для текущего поиска. Допустимые значения - целые числа от 1 до 10 включительно. Если num не используется, предполагается значение 10.
blockquote>Чтобы показать больше результатов, Google предлагает сделать несколько вызовов, увеличивая при этом параметр запуска:
http://support.google.com/customsearch/bin/answer.py?hl=ru&answer=1361951
Пользовательский поиск Google и поиск по сайту Google возвращаются до 10 результатов на запрос. Если вы хотите отобразить более 10 результатов для пользователя, вы можете выдать несколько запросов (используя параметры start = 0, start = 11 ...) и отображать результаты на одной странице. В этом случае Google рассмотрит каждый запрос как отдельный запрос, и если вы используете Google Site Search, каждый запрос будет рассчитываться в соответствии с вашим лимитом.
blockquote>
Во-первых, Google говорит: «Параметры запроса, которые вы можете использовать с API пользовательского поиска JSON / Atom, приведены в этом разделе. Все значения параметров должны быть закодированы в URL». https://developers.google.com/custom-search/v1/using_rest#query-params Значит, что все после "?" должен быть закодирован с эквивалентом php url encoder, который устанавливает стандарт для urlencoding. Дело в том, что класс Java URLEncoder не совсем прав, вам нужно сделать пару replaceAll. Вам нужно сделать это со своим вводом:
String queryArguments = "key="+key+ "&cx="+ cx +"&q="+ searchText+"&alt=json"+"&start="+"0"+"&num="+"30";
Обратите внимание, что есть числа вокруг чисел. Если вы их используете из переменных, используйте следующее:
String thenum = Integer.toString(theinteger);
И затем правильная кодировка
String addition = URLEncoder.encode(queryArguments, "UTF-8")
.replaceAll("\\%28", "(")
.replaceAll("\\%29", ")")
.replaceAll("\\+", "%20")
.replaceAll("\\%27", "'")
.replaceAll("\\%21", "!")
.replaceAll("\\%7E", "~");
Затем вы добавляете это к исходному неэкодированному URL:
String url = "https://www.googleapis.com/customsearch/v1?"
String total = url + addition;
В заключение ваш код будет выглядеть так:
String query = URLEncoder.encode("key="+key+ "&cx="+ cx +"&q="+ searchText+"&alt=json"+"&start="+"0"+"&num="+"30"), "UTF-8").replaceAll("\\%28", "(")
.replaceAll("\\%29", ")")
.replaceAll("\\+", "%20")
.replaceAll("\\%27", "'")
.replaceAll("\\%21", "!")
.replaceAll("\\%7E", "~");
URL url = new URL("https://www.googleapis.com/customsearch/v1?" + query);
HttpURLConnection conn2 = (HttpURLConnection) url.openConnection();
System.out.println("Connection opened!");
conn2.setRequestMethod("GET");
conn2.setRequestProperty("Accept", "application/json");
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn2.getInputStream())));
Надеюсь, это сработает для вас. Я сделал что-то очень похожее на старое устаревшее изображение api, но концепция придерживается того же самого, и я посмотрел на новые документы. :)
EDIT: убедитесь, что ваш параметр num находится между 0 и 10 включительно.