forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   PHP / MySQL (http://forum.boolean.name/forumdisplay.php?f=135)
-   -   PHP что с кодировкой ? (http://forum.boolean.name/showthread.php?t=18544)

Черный крыс 18.09.2013 17:22

PHP что с кодировкой ?
 
Сканирую в ПХП директорию, там папки и файлы именованы кирилицей, вывожу дерево в ХТМЛ, но вместо русских букв вопросики... :( Как это вылечить?

ABTOMAT 18.09.2013 18:10

Ответ: PHP что с кодировкой ?
 
В пыху хидер:

PHP код:

header('Content-Type: text/html; charset=utf-8'); 

В выдачу мету:

Код:

<meta http-equiv="Content-type" content="text/html; charset=utf-8" />

Черный крыс 18.09.2013 18:14

Ответ: PHP что с кодировкой ?
 
Код:

header('Content-Type: text/html; charset=utf-8');
не помогло...

Черный крыс 18.09.2013 18:15

Ответ: PHP что с кодировкой ?
 
PHP код:

<!DOCTYPE HTML>

<html>
    
    <head>
    
        <title>горно-металлургический центр</title>
        
        <?php
        header
('Content-Type: text/html; charset=utf-8');
        
?>
        
        <meta charset="utf-8"/>
        
        <link rel="stylesheet" href="include/css/main.css"/>
    
    </head>
    
    <body>
    
        <header>
            Header
        </header>
        
        <aside>
        
        <?php
            Scan
();
        
?>
        
        </aside>
        
        <content>
            Content
        </content>
        
        <!--
        <footer>
            Footer
        </footer>
        -->
    </body>

</html>

<?php

function Scan($d="materials") {
    
$dirs scandir($d);
    
    echo(
"Выберите курс : <select>");
    
    foreach (
$dirs as $k=>$v) {
        if ((
$v == ".") or ($v == "..")) { continue; }
        if (
filetype("$d/$v") == "file") { continue; }
        echo(
"<option>$v</option>");
    }
    
    echo(
"</select>");
    
    foreach (
$dirs as $k=>$v) {
        if ((
$v == ".") or ($v == "..")) { continue; }
        if (
filetype("$d/$v") == "file") { continue; }
        
BuildTree("$d/$v");
    }
    
}

function 
BuildTree($d) {
    
$files scandir($d);
    
    echo(
"<ul>");
    
    foreach (
$files as $k=>$v) {
        if ((
$v==".") or ($v=="..")) { continue; }
        
        echo(
"<li>$v</li>");
        
        if (
filetype("$d/$v") == "file") {
            
//echo("$d/$v - File<br>");
        
}
        elseif (
filetype($d."/".$v) == "dir") {
            
//echo("$d/$v - Dir<br>");
            
BuildTree("$d/$v");
        }
    }
    
    echo(
"</ul>");
    
}

?>


ABTOMAT 18.09.2013 18:38

Ответ: PHP что с кодировкой ?
 
<?php
header('Content-Type: text/html; charset=utf-8');
?>


Это до выдачи в самое начало

Randomize 18.09.2013 18:49

Ответ: PHP что с кодировкой ?
 
Цитата:

Сообщение от ABTOMAT (Сообщение 267288)
<?php
header('Content-Type: text/html; charset=utf-8');
?>


Это до выдачи в самое начало

Фигню же советуешь.
Винда же у нас win-1251. Значит и имена файлов в этой же кодировке. Нужно конвертировать перед выдачей например так:
PHP код:

mb_convert_encoding($file"Windows-1251""utf-8"); 

*надеюсь что расширение mb_string сейчас везде есть

Ну или делать всё в Windows-1251, но это плохой вариант. Юникод спасёт мир.

Черный крыс 18.09.2013 18:51

Ответ: PHP что с кодировкой ?
 
Рандомэ... теперь стало наверно лучше.... вместо вопросиков в ромбике теперь простые вопросики... =)

Randomize 18.09.2013 19:05

Ответ: PHP что с кодировкой ?
 
Вложений: 1
Цитата:

Сообщение от Diablo1909 (Сообщение 267291)
Рандомэ... теперь стало наверно лучше.... вместо вопросиков в ромбике теперь простые вопросики... =)

Держи рабочий семпл.
Вложение 19694

Лень было разбираться с mb_*
Видать он у меня через одно место настроен.
Сделал через iconv.

Это можно убрать
PHP код:

setlocale(LC_ALL'ru_RU.UTF-8');
mb_internal_encoding("UTF-8"); 


Черный крыс 18.09.2013 19:11

Ответ: PHP что с кодировкой ?
 
Урре! робит через иконв. Спасибо!

Randomize 18.09.2013 19:13

Ответ: PHP что с кодировкой ?
 
Цитата:

Сообщение от Diablo1909 (Сообщение 267295)
Урре! робит через иконв. Спасибо!

Обращайся ;)

ABTOMAT 18.09.2013 20:46

Ответ: PHP что с кодировкой ?
 
Цитата:

Сообщение от Randomize (Сообщение 267289)
Фигню же советуешь.
Винда же у нас win-1251. Значит и имена файлов в этой же кодировке. Нужно конвертировать перед выдачей например так:
PHP код:

mb_convert_encoding($file"Windows-1251""utf-8"); 

*надеюсь что расширение mb_string сейчас везде есть

Ну или делать всё в Windows-1251, но это плохой вариант. Юникод спасёт мир.

Где он говорил, что у него Винда? Впрочем ты прав. Я что-то не подумал.

Phantom 19.09.2013 14:16

Ответ: PHP что с кодировкой ?
 
Когда пишу под винду какие-то консольные утилиты для себя, то пути тоже всегда через iconv конвертирую. А на линуксах не приходилось юзать русские символы. Ещё для вывода в консоль использую следующий велосипед (не нашёл способа перевести на юникод текущее консольное окно в винде автоматически):
PHP код:

<?php
// *********************************************************
class Console{
  
// *******************************************************
  
private $charset;
  
// *******************************************************
  
private function __construct(){ }
  
// *******************************************************
  
private function __clone(){ }
  
// *******************************************************
  
public static function getInstance(){
    static 
$instance=null;
    if(
$instance==null){
      
$instance=new self();
      
$instance->charset(stripos(PHP_OS,'win')===0?'cp866':'utf-8');
    }
    return 
$instance;
  }
  
// *******************************************************
  
public function charset($charset=null){
    if(
$charset==null) return $this->charset;
    
$this->charset=strtolower($charset);
  }
  
// *******************************************************
  
public function read(){
    return 
iconv($this->charset,'utf-8//IGNORE',fgets(STDIN));
  }
  
// *******************************************************
  
public function write($string){
    
fputs(STDOUT,iconv('utf-8',$this->charset.'//IGNORE',$string));
  }
  
// *******************************************************
}
// *********************************************************
?>

Пример использования:
PHP код:

<?php

$console
=Console::getInstance();
$console->write("Выводим эту строку в консоль\n");
$str=$console->read(); // ждём ввод строки пользователем

?>

Расчёт на то, что сам скрипт после этого пишется полностью в UTF-8. На линуксе не проверял, но один чел сказал, что решение работает.

Черный крыс 22.09.2013 11:06

Ответ: PHP что с кодировкой ?
 
Через AJAX отправляю запрос в ПХП методом GET. Он должен просканировать папку на предмет существования в нем файлов и вернуть результат. отправка :

Scan.php?d=materials/1/1_HTML/1_tabels_HTML

в поле d - хранится путь к папке, которую надо просканировать.

Но ПХП в упор не видит эту папку. Переводил строку пути в формат WINDOWS-1251 - всеравно сканирования не происходит. Все пути заданы верно.

PHP код:

$dd $_GET['d'];

$d iconv("UTF-8""WINDOWS-1251"$dd);

if (
filetype($d) != "dir") echo("ERROR ".$d);

$files scandir($d);

echo(
$d);

foreach (
$files as $k=>$v) {
    if ((
$v == ".") or ($v == "..")) continue;
    echo(
$v);


UPD Проблемма решена, выросло из BlitzMAX-привычки =)

Randomize 22.09.2013 14:01

Ответ: PHP что с кодировкой ?
 
PHP код:

filetype($d) != "dir" 

лучше заменить на
PHP код:

is_dir($d



Часовой пояс GMT +4, время: 07:30.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot