Вот трюк:
<?php
$name = 'PHP variable';
echo '<script>';
echo 'var name = ' . json_encode($name) . ';';
echo '</script>';
<?
<script>
console.log("i am everywhere " + name);
</script>
Вероятно, из-за этой ошибки или любой из многих подобных ошибок в базе данных ошибок Java:
http://bugs.sun.com/view_bug.do?bug_id=4523159
Причина в том, что «! /» в jar-URL интерпретируется как разделитель между именем файла JAR и курсором в самом JAR-файле. Если имя каталога заканчивается на!, Последовательность символов «! /» В конце каталога неверно интерпретируется. В вашем случае вы фактически пытаетесь получить доступ к ресурсу со следующим URL:
jar: file: /// d: / test1231 @ # !!! /test.jar! / Images / Logo. png
Ошибка была открыта почти 12 лет и вряд ли будет исправлена. На самом деле я не знаю, как это можно исправить, не нарушая других вещей. Проблема заключается в конструктивном решении использовать! как символ со специальным значением (разделитель) в схеме URL-адресов для файлов JAR:
jar:<URL for JAR file>!/<path within the JAR file>
Поскольку восклицательный знак является допустимым символом в URL-адресах, это может происходить как в URL-адресе JAR-файла сам, а также на пути в JAR-файле, что делает невозможным в некоторых случаях найти фактический разделитель «! /».
Простая работа для Windows заключается в использовании «\» вместо «/» в пути. Это означало бы, что последовательность символов «! /» Будет найдена после полного пути. Например:
new URL("jar:file:\\d:\\test1231@#!!!\\test.jar!/images/Logo.png");
Мой код:
File jar = new File(jarPath + "/" + jarName);
URL url = new URL("jar:" + jar.toURI() + "!" + dataFilePath);
InputStream stream = null;
try {
stream = url.openStream();
} catch (FileNotFoundException e) {
// Windows fix
URL urlFix = new URL("jar:" + jar.toURI().toString().replace('/', '\\')
+ "!" + dataFilePath);
stream = urlFix.openStream();
}
Я использую toURI (), потому что он обрабатывает такие вещи, как пробелы.
Исправления:
Само исправление предназначалось бы для Java, чтобы проверить, существует ли файл, и если не продолжать следующий разделитель (часть!!) URL-адреса до тех пор, пока разделители не будут исчерпаны, а затем выбросите исключение. Поэтому он увидит, что «d: \ test1231 @ # !!» бросает java.io.FileNotFoundException и затем пытается «d: \ test1231 @ # !!! \ test.jar», который существует. Таким образом, не имеет значения, есть ли «!» в пути к файлу или в файлах jar.
В качестве альтернативы «! /» можно переключить на другое, что является незаконным именем файла или чем-то конкретным (например, «jarpath:»).
В качестве альтернативы сделать путь к файлу jar другим параметром.
Примечание:
Возможно, что-то можно переопределить, поменять обработчик или изменить код, чтобы открыть файл сначала загляните в файл jar позже, но я не посмотрел.