В документации PHP говорится:
Конечно, чтобы быть полезными, функции, которые работают с текстом, возможно, должны будут сделать некоторые предположения о том, как кодируется строка. К сожалению, в функциях PHP есть много различий в этом вопросе:
[... описано несколько особых случаев ...]
В конечном итоге это означает, что написание правильных программ с использованием Unicode зависит от тщательно избегайте функций, которые не будут работать и которые, скорее всего, повредят данные [...]
Источник: https://www.php.net/manual/en/language.types.string.php
Естественно, мой вопрос is: Где находятся эти спецификации, которые позволяют нам идентифицировать кодировку / кодировку, связанную со строковыми аргументами, возвращаемыми значениями, константами, ключами / значениями массива, ... для встроенных функций / методов / данных (например, array_key_exists
, DOMDocument::getElementsByTagName
, DateTime::format
, $_GET[$key]
, ini_set
, PDO::__construct
, json_decode
, Exception::getMessage()
и многие другие)? Как поставщики пакетов composer определяют кодировки, в которых они принимают / предоставляют текстовые данные?
Я примерно работал со следующей эвристией c: (1) никогда не меняйте кодировку чего-либо, (2 ), когда вы вынуждены выбрать кодировку, выберите UTF-8. Это работает годами, но кажется очень неудовлетворительным.
Каждый раз, когда я пытаюсь найти ответ на вопрос, я получаю только результаты поиска, касающиеся кодировки URL, HTML сущностей или объяснения интерпретации строковых литералов (с кодировкой исходного файла).