Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Загадочный знак вопроса

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
LCarlo
Отправлено: 19 Июня, 2014 - 11:02:51
Post Id



Новичок


Покинул форум
Сообщений всего: 46
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




Здравствуйте форумчане !
Через раз при записи данных в файл в конец файла ($Mfile) пишется не (?>), а (?>>) или (?>?>):
PHP:
скопировать код в буфер обмена
  1. $file = fopen($Mfile, "w");
  2. fwrite($Mfile, "<?PHP \r\n$a = 'Simple string';\r\n?> "); // "<?PHP \r\n $a = 'Simple string';\r\n ?> " //с пробелами и без, даже пробовал ч-з <<<HTML ... HTML;
  3. fclose($Mfile);


Надо бы закомментировать, подумал я, и увидел (в редакторе gedit), что строка комментируется до знака вопроса, выходит для интерпретатора остается:
//fwrite($Mfile, "<?php\r\n$a = 'Simple string';\r\n?> "); ? Как быть ?
ps: PHP/5.3.10-1ubuntu3.11 with Suhosin-Patch, ошибок, при этом, в логе нету .

(Отредактировано автором: 19 Июня, 2014 - 11:13:23)

 
 Top
DelphinPRO
Отправлено: 19 Июня, 2014 - 11:32:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




однажды у меня примерно так же редактор глюканул.
видимо какой-то невидимый символ. наберите код в новом файле (только не копипастой), а этот удалите.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
LCarlo
Отправлено: 19 Июня, 2014 - 11:37:23
Post Id



Новичок


Покинул форум
Сообщений всего: 46
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




DelphinPRO пишет:
однажды у меня примерно так же редактор глюканул.
видимо какой-то невидимый символ. наберите код в новом файле (только не копипастой), а этот удалите.

я бы тоже принял это за глюк редактора, но лишний (?) в коде, который появляется там случайным образом, указывает на обработку этого знака самими PHP, вот только не понятно, ведь все, что в ' ' - считается строкой без переменных ( пробовал также:
... '<?php'."\r\n".$contentFile."\r\n".'?>' )

(Отредактировано автором: 19 Июня, 2014 - 11:37:50)

 
 Top
DelphinPRO
Отправлено: 19 Июня, 2014 - 11:58:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




я бы попробовал. чем черт не шутит Улыбка
и это, скорее, не глюк редактора, а глюк харда. или файловой системы, или хз что еще.

О! посмотрите в hex-редакторе этот участок. наверняка там лишний байт затесался...


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Sail
Отправлено: 19 Июня, 2014 - 12:42:06
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Однако, надо внимательнее быть!
$file = fopen($Mfile, "w");
fwrite($Mfile, "<?PHP \r\n$a = 'Simple string';\r\n?> ");
fclose($Mfile);
И в имени переменной '$' экранировать в строке... (если не надо вывести значение $a)
И PHP_EOL вместо \r\n использовать...

И ещё про однострочные комментарии:
Цитата:
Однострочные комментарии идут только до конца строки или текущего блока PHP-кода, в зависимости от того, что идет перед ними. Это означает, что HTML-код после // ... ?> или # ... ?> БУДЕТ напечатан: ?> завершает режим PHP и возвращает режим HTML, а // или # не могут повлиять на это.

(Отредактировано автором: 19 Июня, 2014 - 13:00:35)

 
 Top
useruser
Отправлено: 19 Июня, 2014 - 13:40:56
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




Дабы не создавать отдельную тему, тоже про знак вопроса. Хм
Ничего не понимаю. Кодировки везде утф 8 (без бом) Весь проект работает без единой крякозябры.
Но есть странная часть кода.
Что ни ставь в $letter='1'.$letter.''; -щас поставил единицу, -то вопросы. Не понял
А если всё убрать $letter=''.$letter.''; то Результат EngРус.
Загадка

PHP:
скопировать код в буфер обмена
  1.  
  2. $username="EngРус";
  3. //Выделяем цветом русские и английские буквы
  4. //Длина строки
  5. $finalname='';
  6. $namelenght=strlen($username);
  7.  
  8. for($i=0; $i<$namelenght; $i++)
  9. {
  10. //Если буква не английская
  11. $letter=mb_substr($username,$i,1);
  12. if(!preg_match('/[A-Za-z]/',$letter))
  13.  
  14. //Загадочное место - тут и появляются вопросы
  15. $letter='1'.$letter.'';
  16.  
  17. $finalname=$finalname.$letter;
  18.  
  19. }
  20. $color_username=$finalname;
  21. echo"$color_username";
  22.  


Результат
Eng1�1�1�1�1�1�
 
 Top
LCarlo
Отправлено: 19 Июня, 2014 - 14:25:41
Post Id



Новичок


Покинул форум
Сообщений всего: 46
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




useruser
Используйте mb_strlen($len, 'utf-8') и дописывайте кодировку к mb_substr + header с utf-8

(Отредактировано автором: 19 Июня, 2014 - 14:26:05)

 
 Top
DelphinPRO
Отправлено: 19 Июня, 2014 - 14:28:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




mb_strlen

strlen считает байты (в utf-8 на один символ может приходится до 6 байтов)
mb_strlen - учитывает кодировку, и правильно считает символы.

(Отредактировано автором: 19 Июня, 2014 - 14:29:32)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
LCarlo
Отправлено: 19 Июня, 2014 - 14:31:01
Post Id



Новичок


Покинул форум
Сообщений всего: 46
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




Sail пишет:
И в имени переменной '$' экранировать в строке... (если не надо вывести значение $a)

Но здесь же двойные кавычки, знак $ интерпретируется как переменная.

Sail пишет:
Однострочные комментарии идут только до конца строки или текущего блока PHP-кода, в зависимости от того, что идет перед ними. Это означает, что HTML-код после // ... ?> или # ... ?> БУДЕТ напечатан: ?> завершает режим PHP и возвращает режим HTML, а // или # не могут повлиять на это.

а в этом-то и проблема, что '<?php ... ?>' идет как строка (что пишется в файл), но, почему-то, после '?>' доставляются знаки.
 
 Top
LIME
Отправлено: 19 Июня, 2014 - 14:59:06
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




LCarlo пишет:
Но здесь же двойные кавычки, знак $ интерпретируется как переменная.
вот именно
в строку попадет ее значение
а еще у тебя дискриптор $file а пишешь ты в $Mfile
каша короче
 
 Top
useruser
Отправлено: 19 Июня, 2014 - 15:22:16
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




LCarlo пишет:
header с utf-8
DelphinPRO пишет:
strlen считает байты (в utf-8 на один символ может приходится до 6 байтов)


Изменил. Считает правильно - 6 символов.

PHP:
скопировать код в буфер обмена
  1.  
  2.  $username="EngРус";
  3. $finalname='';
  4. /* $namelenght=strlen($username); */
  5. $namelenght=mb_strlen($username, 'utf-8');
  6.  
  7. for($i=0; $i<$namelenght; $i++)
  8. {
  9. $letter=mb_substr($username,$i,1);
  10.  
  11. if(!preg_match('/[A-Za-z]/',$letter))
  12. $letter='1'.$letter.'';
  13.  
  14. $finalname=$finalname.$letter;
  15.  
  16. }
  17. $color_username=$finalname;
  18. echo"$namelenght $color_username";
  19.  
  20.  
  21.  

Результат
6 Eng1�1�1�

(Отредактировано автором: 19 Июня, 2014 - 15:26:40)

 
 Top
DelphinPRO
Отправлено: 19 Июня, 2014 - 19:35:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




useruser пишет:
$letter=mb_substr($username,$i,1);

Кодировку вместо тебя Пушкин должен указывать?

PS можно воспользоваться mb_internal_encoding чтобы не писать кодировку в каждой функции.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
useruser
Отправлено: 20 Июня, 2014 - 06:51:22
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




DelphinPRO пишет:
Кодировку вместо тебя Пушкин должен указывать?

Заработало. Радость
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB