Как сузить контекст языкового стандарта / кодовой страницы в современном PHP? - PullRequest
0 голосов
/ 13 июля 2020

У меня php_mod 7.2.31 работает под LightSpeed, локаль среды - UTF8. Мой очень маленький тестовый проект должен работать только с данными ASCII, поскольку env. локаль - UTF8, проверка ctype_alnum() перекосилась. Я мог бы решить эту проблему, вызвав setlocale(), однако, согласно документации, setlocale() небезопасно в многопоточной среде:

Предупреждение. Информация о языковом стандарте сохраняется для каждого процесса, а не для потока. Если вы используете PHP на многопоточном серверном API, таком как IIS, HHVM или Apache на Windows, вы можете столкнуться с внезапными изменениями в настройках локали во время работы сценария, хотя сам сценарий никогда не вызывал setlocale (). Это происходит из-за того, что другие сценарии работают в разных потоках одного и того же процесса одновременно, изменяя локаль всего процесса с помощью setlocale ().

Думаю, это имеет смысл. Хостинг управляется моим провайдером, поэтому я не знаю всех подробностей о нем, но в целях безопасности предполагаю, что он многопоточный. Как люди справляются с такими случаями? Мои предположения на данный момент:

  1. Отказаться и обработать все в UTF / multibyte
  2. Использовать preg_match () (как и при любом сопоставлении регулярных выражений на любом другом языке, я предполагаю, что он всегда медленнее, чем родной инструменты строки / символов)
  3. Использовать какой-нибудь умный механизм для управления языками / кодировками?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...