1

Тема: AHK: Кодировка текстовика при передаче на сервер через php

Доброго времени суток. Столкнулся с такой проблемой..
Мне нужно взять текст с файла и отправить его php файлу, который после запишет его в текстовик, лежащий на сервере
Код ahk:

FileRead, TextVar, C:\logs\myname.txt
URLDownloadToFile, http://test-site.ru/myname.php?Text=%TextVar%, %a_temp%/s.php

Код php, которому ahk отправляет текст:

<?php 

 $Text = $_GET['Text'];

 $file = 'textfile.txt';

 $current = file_get_contents($file); 
 $current .= "$Text\n";

file_put_contents($file, $current); 

 ?>

В итоге при просмотре файла по адресу http://test-site.ru/textfile.txt вместо русского алфавита видно что-то вроде этого

"������� �������". 

Все 3 файла в кодировке ansi, сколько уже перепробовал, так и не смог ничего сделать, хотя наверняка всё довольно просто. help c:

2 (изменено: belyankin12, 2017-08-03 15:03:42)

Re: AHK: Кодировка текстовика при передаче на сервер через php

Мне очень не нравится ссылка тут. Попробуйте так:

 url := "http://test-site.ru/myname.php?Text=" . TextVar . ""
URLDownloadToFile, %url%, %a_temp%/s.php

Не уверен что поможет, но так будет правильнее, я думаю.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

3

Re: AHK: Кодировка текстовика при передаче на сервер через php

NuboCoder, не пойму, а что, по-вашему, делает ваш код ahk?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4

Re: AHK: Кодировка текстовика при передаче на сервер через php

Видимо, вызывает PHP-скрипт с параметром, в котором передаётся текст файла.

5

Re: AHK: Кодировка текстовика при передаче на сервер через php

А что, так можно?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Кодировка текстовика при передаче на сервер через php

Во всяком случае, кириллица в URL должна быть перекодирована с помощью:

URIEncode(str, encoding := "UTF-8")  {
	VarSetCapacity(var, StrPut(str, encoding))
	StrPut(str, &var, encoding)

   While code := NumGet(Var, A_Index - 1, "UChar")  {
		bool := (code > 0x7F || code < 0x30 || code = 0x3D)
		UrlStr .= bool ? "%" . Format("{:02X}", code) : Chr(code)
   }
   Return UrlStr
}

с указанием нужной кодировки.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Кодировка текстовика при передаче на сервер через php

teadrinker пишет:

А что, так можно?

Да, параметры же передаются скрипту в массиве _GET. А в ответ он тоже может что-нибудь передать, и UrlDownloadToFile сохранит его ответ в файл.

8

Re: AHK: Кодировка текстовика при передаче на сервер через php

teadrinker, простите, я не понимаю, не подскажите, как это правильно использовать в моём случае?

9

Re: AHK: Кодировка текстовика при передаче на сервер через php

Попробуйте так:

FileRead, TextVar, C:\logs\myname.txt
TextVar := URIEncode(TextVar)
URLDownloadToFile, http://test-site.ru/myname.php?Text=%TextVar%, %a_temp%\response.txt

URIEncode(str, encoding := "UTF-8")  {
   VarSetCapacity(var, StrPut(str, encoding))
   StrPut(str, &var, encoding)

   While code := NumGet(Var, A_Index - 1, "UChar")  {
      bool := (code > 0x7F || code < 0x30 || code = 0x3D)
      UrlStr .= bool ? "%" . Format("{:02X}", code) : Chr(code)
   }
   Return UrlStr
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: Кодировка текстовика при передаче на сервер через php

teadrinker, вообще ничего не приходит.

11

Re: AHK: Кодировка текстовика при передаче на сервер через php

teadrinker, во что он превращает значение переменной "TextVar":

http://f1.s.qip.ru/N7Lfc7kA.png

12 (изменено: Malcev, 2017-08-04 14:13:01)

Re: AHK: Кодировка текстовика при передаче на сервер через php

Попробуйте код из поста номер 9.
А свой php измените на такой:

<?php 

 $Text = $_GET['Text'];

 $file = 'textfile.txt';

 $current = file_get_contents($file);
 if (file_exists($file)) {
    $current .= "$Text\n";
} else {
    $current .= "\xEF\xBB\xBF$Text\n";
}

file_put_contents($file, $current);

 ?>

А в ответ ничего не приходит, так как ничего и не должно приходить.
Запустите "http://test-site.ru/myname.php?Text=тест" в броузере и увидите пустую страницу.
С помощью urldownloadtofile вы делаете тоже самое, только еще эту пустую страницу сохраняете.

13

Re: AHK: Кодировка текстовика при передаче на сервер через php

Malcev, страница то пустая, но переданный текст всё равно записывается в файл. Разобрался, скорее всего данные не записывались в текстовик на сервере, потому что читаемый файл был слишком длинным. Короткие строчки приходят нормально и корректно отображаются. Благодарю всех за помощь.