2011-02-03 2 views
1

Сегодня я испытал странную проблему:PHP ctype_print - различное поведение в Windows и Linux?

На моей машине для окон вернулось значение ctype_print ("äöütest").

Но когда я был на моей машине linux (debian), он вернул false.

В документации php.net я читал, что набор локалей может повлиять на это. Как это изменить?

Edit: На самом деле - когда я бегу

setlocale(LC_ALL, null) 

на моей локальной машине я получаю

German_Germany.1252

На сервере я получаю

C

Что было бы разумным значением по умолчанию?

ответ

3

что-то вроде этого, я думаю

// set locale encoding ISO-8859-2 
    // pl_PL for Linux 
    // polish_Poland.28592 for Windows 
    if (PHP_OS == 'WINNT') { 
    setlocale(LC_ALL, 'polish_Poland.28592'); 
    } else { 
    setlocale(LC_ALL, 'pl_PL'); 
    } 

для установки в UTF-8

<?php 
$codeset = "UTF8"; // warning ! not UTF-8 with dash '-' 

// for windows compatibility (e.g. xampp) : theses 3 lines are useless for linux systems 

putenv('LANG='.$lang.'.'.$codeset); 
putenv('LANGUAGE='.$lang.'.'.$codeset); 
bind_textdomain_codeset('mydomain', $codeset); 

// set locale 
bindtextdomain('mydomain', ABSPATH.'/locale/'); 
setlocale(LC_ALL, $lang.'.'.$codeset); 
textdomain('mydomain'); 
?> 

где структура каталогов локали (например): национальная_версия/fr_FR/LC_MESSAGES/mydomain.mo locale/en_US/LC_MESSAGES/mydomain.mo

и ABSPATH - это абсолютный путь к каталогу локали

Обратите внимание, что в Linux-системах, похоже, необходимо создать локаль на уровне os, используя 'locale-gen'.

+0

Хорошо, но если бы я хотел иметь целую кодировку UTF8? Или это действительно просто код языка, и я должен выбрать его? –

+0

@Sebastian: см. Отредактированный ответ. и да, это всего лишь код локали. – ayush