В PHP, если я создам такую строку:
$ str = "bla bla вот моя строка";
Смогу ли я использовать функции mbstring для работы с этой строкой как UTF8?
// Будет ли это работать? $ str = mb_strlen ($ str);
Кроме того, если у меня есть другая строка, которую я знаю, это UTF-8 (скажем, это значение POSTED или строка UTF-8 из базы данных), могу ли я затем объединить эти два и не иметь никаких проблем?
// Как насчет этого, будет ли это работать? $ str = $ str. $ Utf8_string_from_database;
Первый вопрос: это зависит от того, что именно идет в строке.
В PHP (вплоть до PHP5, во всяком случае) строки – это просто последовательности байтов. С ними не связано подразумеваемый или явный набор символов; это то, о чем программист должен отслеживать. Итак, если вы помещаете только допустимые байты UTF-8 между кавычками (довольно легко, если сам файл кодируется как UTF-8), тогда строка будет UTF-8, и вы можете безопасно использовать mb_strlen () на ней.
Кроме того, если вы используете функции mbstring, вам нужно явно указать, какой символ задает ваша строка, либо с помощью mbstring.internal_encoding, либо как последний аргумент любой функции mbstring.
Второй вопрос: да, с оговорками.
Две строки, которые являются независимо действительными UTF-8, могут быть безопасно объединены по байтам (например, с оператором PHP) и по-прежнему быть действительными UTF-8. Тем не менее, вы никогда не можете быть уверены, не выполняя какую-либо работу самостоятельно, что строка POSTed действительна UTF-8. Строки базы данных немного проще, если вы тщательно установите набор символов соединения, поскольку большинство СУБД сделают для вас любое преобразование.
Если ваш исходный код находится в UTF-8, то строка находится в UTF-8, если нет – это не так. Так как строка вашего примера используется только на английском языке, это действительно UTF-8.
PHP сам не знает о кодировках. Если вы передаете материал функции mb *, он обрабатывает его как строку UTF-8.
Конкатенация должна работать нормально, несмотря ни на что, если я правильно понимаю UTF-8 🙂 Просто убедитесь, что обе строки – UTF-8, иначе вы получите странную строку в результате.
Убедитесь, что ваша директива default_charset установлена в UTF-8 до того, как произойдет какое-либо из этих действий.
Либо измените php.ini напрямую, либо выполните его во время выполнения с помощью
<?php ini_set( 'default_charset', 'UTF-8' );