C1inicist, с PDF все хорошо, о нем в такой задаче можно просто забыть.
А вот XLSX в CSV штатно переводит любой офис.
Вот только что вы потом будете делать с такой кашей неструктурированных данных - это для меня загадка.
В самом общем - придется утереться.
Потому что просто взять и уверенно отредактировать произвольную PDF даже Акробату слабо.
Если имеются в виду файлы, сгенерированные той же системой, имеет смысл не мастурбировать с форматами, а хранить информацию в том же HTML и при необходимости править в нем же, благо он позволяет. А после правки снова генерить из него офисные доки и PDF.
Сергей delphinpro, в том и цимес, что использование предпочтительных методов походя устранило бы и эту проблему, именно из-за вклеивания переменных в запрос и возникшую. А вы ему - удобную насадку на костыль ;)
Александр Маджугин, для Thunderbird это поведение по умолчанию, например.
Веб-почта, особенно от рекламных сетей вроде Яндекса, конечно, лояльнее к завлекающим вытребенькам.
Сергей delphinpro, так и это уже давно моветон. Эскейп оставляет массу возможностей наступить себе на яйца, которые традиционно и успешно устраняются плейсхолдерами или подготовленными выражениями.
Я все-таки убежден, что от одного вида строчки запроса, в которую вставлена переменная, опытному пыхеру должно становиться неуютно. Во избежание.
Максим Тимофеев, сохранить временный файл. Передать его название в sendVoice. И удалить.
Это, по-вашему, "усложнение"? По сравнению с вашими танцами вокруг веб-сервера?
Которого, вообще говоря, может и не быть у ТС - в вопросе он не упоминается.
Нет уж, я вас не уговариваю ничего писать. Скорее напротив...
Максим Тимофеев, так ТС и пишет прослойку между этими двумя разными системами.
Причин усложнять ее тривиальную работу не вижу, ваши аргументы - из серии "но так же тоже можно".
Посмотрите, как с этим справляются файлообменники - mega.nz, например.
Они не провоцируют закачку файлов пользователем, а загружают их во временное хранилище браузера - и предлагают пользователю выбрать путь сохранения уже не закачиваемого файла, а блоба.
С приветом от пользователя с логином '; DROP DATABASE; '
Вот на хрена учить малька плохому?
У прогера должен быть рвотный рефлекс на такие строчки, а у наставника - топорщиться ремень...
Тут как раз тот случай, когда "после" означает как раз "вследствие".
Винда при переустановке затерла загрузчик, поставив свой.
Гуглим "восстановление GRUB" - рецептов валом.