php middot之谜

时间:2018-01-14 14:21:46

标签: php unicode

我有一个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

希望有所帮助

2 个答案:

答案 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字符的有效第一个字节。