Лучше всего начать с вкладки «Сеть» инструментов разработчика браузера. Там, вы можете увидеть исходящий запрос и то, что он возвращает с .
Откройте свою форму в браузере и запустите событие click. Затем найдите запрос к getItem.php и посмотрите на его ответ . Если это не то, что вы ожидаете, установите getItem.php на echo 'hello' и умрите; если вкладка сети не показывает «привет» в ответе, это означает, что вы не достигли конечной точки. Если вы видите «привет», поздравляю, вы близки!
Что касается вашей фактической конечной точки, я вижу, что вы неоднократно повторяли результаты вашего запроса. Это не самый полезный способ сделать это. Вместо этого json_encode весь набор результатов, вывести его на экран и уничтожить скрипт . Это вернет все строки вашей таблицы в виде массива JSON, который затем может быть прочитан с помощью javscript обратно на стороне клиента. . Я надеюсь, что все это поможет!
Существует библиотека под названием "UTF8-CPP", который позволяет Вам сохранить свои строки UTF-8 в стандартном станд.:: представьте объекты в виде строки, и обеспечивает дополнительные функции, чтобы перечислить и управлять utf-8 символами.
Я еще не протестировал его, таким образом, я не знаю то, что это стоит, но я рассматриваю использование его сам.
strlen считает количество непустых символов перед первыми \0. В UTF-8 то количество является нормальным числом (число используемых байтов), но количество не является количеством символов (один символ UTF-8 обычно является 1-4 символами). basic_string не хранит \0, но он также проводит подсчет байта.
strcpy или basic_string копируют копию ctor все байты, не смотря слишком тесно.
Нахождение подстроки работает хорошо из-за способа, которым кодируется UTF_8. Позволенные значения для первого байта символа отличны от второго до 4-го байта (первый никогда не запускает с 10xxxxxx, последний всегда),
Взятие подстроки хитро - как Вы указываете положение? Если начинание и конец были найдены путем поиска маркеров текста ASCII (например, [и]) затем нет никакой проблемы. Вы просто получили бы байты в середине, которые являются допустимой строкой UTF8 также. Вы не можете harcode положения или даже относительные смещения все же. Даже относительное смещение +1 символа может быть трудным; сколько байтов это? Вы закончите тем, что писали функцию как SkipOneChar.
Пример с библиотекой ICU (C, C++, Java):
#include <iostream>
#include <unicode/unistr.h> // using ICU library
int main(int argc, char *argv[]) {
// constructing a Unicode string
UnicodeString ustr1("Привет"); // using platform's default codepage
// calculating the length in characters, should be 6
int ulen1=ustr1.length();
// extracting encoded characters from a string
int const bufsize=25;
char encoded[bufsize];
ustr1.extract(0,ulen1,encoded,bufsize,"UTF-8"); // forced UTF-8 encoding
// printing the result
std::cout << "Length of " << encoded << " is " << ulen1 << "\n";
return 0;
}
здание как
$ g++ -licuuc -o icu-example{,.cc}
выполнение
$ ./icu-example
Length of Привет is 6
Работы для меня на Linux с GCC 4.3.2 и libicu 3.8.1. Обратите внимание на то, что это печатает в UTF-8, какова системная локаль. Вы не будете видеть, что это правильно, если Ваш не UTF-8.
Это зависит, что Вы хотите сделать со Строкой UTF8. Если все, чем Вы интересуетесь, читает в и строки UTF8 затем, все это работает, пока Вы установили корректную локаль. Мы делали это в течение некоторого времени. У нас есть несколько серверных процессов, которые ничего не делают со строками как таковыми. Там представляет в виде строки, установлены пользователем в Java и прибывают как UTF8, и мы обрабатываем их в стандарте c буферы ул. Мы затем передаем данные обратно Java, который преобразовывает их назад.
Если Вы хотите длину в символах UTF8 затем, Вы хотите функции, которые могут обработать перевод для Вас.
Но можно прокрутить собственное, например, utf8-strlen
С чем мы обосновались: сохраните UTF8 в станд.:: строка. Можно сделать большинство операций теперь, за исключением вещей как вычисления длины. Используйте UTF8-> станд.:: функция преобразования wstring (повышение:: from_utf8, например) для преобразования в станд.:: wstring, когда Вам нужны такие операции.
От UTF-8 и Unicode FAQ: C поддерживают для Unicode:
#include <stdio.h>
#include <locale.h>
int main()
{
if (!setlocale(LC_CTYPE, "")) {
fprintf(stderr, "Can't set the specified locale! "
"Check LANG, LC_CTYPE, LC_ALL.\n");
return 1;
}
printf("%ls\n", L"Schöne Grüße");
return 0;
}
Также отсюда:
Хорошие новости - это, если Вы используете
wchar_t*
строки и семейство функций, связанных с ними такой какwprintf
,wcslen
, иwcslcat
, Вы имеете дело со значениями Unicode. В мире C++ можно использоватьstd::wstring
обеспечить дружественный интерфейс. Моя единственная жалоба - то, что это 32-разрядные (4-байтовые) символы, таким образом, они - пожиратели ресурсов памяти для всех языков. Причина этого выбора состоит в том, что он гарантирует, что каждый возможный символ может быть представлен одним значением.
PS. Это является, вероятно, определенным для Linux. Существует библиотека ICU для обработки сложных вещей.