我有一个Java应用程序,我通过PHP exec调用。 Java在命令行上显示middot:“·”
但是当在utf-8 html页面中从PHP调用代码时,我有一个“?”而不是“·”。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<form method="post" action="essai2.php">
<input type="text" name="texte" />
<input type="submit" value="Valider" />
</form>
<?php
echo "input text : ".$_POST['texte'];
exec("/usr/bin/java -jar runner.jar ".$_POST['texte'], $variable);
echo "<br>output text : ".$variable[0];
?>
</body>
</html>
有任何线索吗? (我试过htmlentities,htmlspecialchars。命令行上的文本文件是utf-8)
为了更好地掌握这个问题: 在命令行上我做
java -jar runner.jar "le agriculteur est mort"
我得到了
[le·la,agriculteur·trice,est,mort]
在网络服务器上我得到了
[le?la,agriculteur ?? trice,est,mort]
这一切的十六进制代码(跟随Rick James评论)是:
5b6c653f6c612c206167726963756c746575723f3f74726963652c206573 742c206d6f72745d
希望有所帮助
答案 0 :(得分:0)
ok由于某种原因php exec改变了语言环境。 所以答案是根据PHP exec change encoding
是在执行exec之前设置语言环境:
$var = "[h1]This is Just a text, [h1]and this inside it[/h1] This just example[/h1]";
$output = preg_replace("/\[h1\](.*?)\[\/h1]/", "<h1>$1</h1>", $var);
echo $output;
和VOILÀ!!
答案 1 :(得分:0)
如果您以十六进制B7
开头,但最终得到?
(3F
),那可能是因为该文字是在latin1
(或任何cp1250)中编码的,cp1251,cp1256,cp1257,dec8,geostd8,greek,hebrew,latin5,latin7),n被视为UTF-8。 B7
不是任何utf8字符的有效第一个字节。