Php 允许某些(丹麦语)字符带有HTML字符

Php 允许某些(丹麦语)字符带有HTML字符,php,security,output,Php,Security,Output,我有一个数据库,需要在其中为用户显示记录。我使用htmlentities来确保没有恶意代码像这样被回传给用户: function h($string) { return htmlentities($string, ENT_SUBSTITUTE, "UTF-8"); } $dbh = new PDO('mysql:dbname=myName;charset=utf8;host=myHost', 'myUser', 'myPassw0rd'); 然后在向用户输

我有一个数据库,需要在其中为用户显示记录。我使用htmlentities来确保没有恶意代码像这样被回传给用户:

    function h($string) {
      return htmlentities($string, ENT_SUBSTITUTE, "UTF-8");
    }
    $dbh = new PDO('mysql:dbname=myName;charset=utf8;host=myHost', 'myUser', 'myPassw0rd');
然后在向用户输出任何条目时调用该函数。问题是,我需要能够显示丹麦字符ÆØ,这些字符显示为正方形中的问号。该网站也有utf-8编码

我已经尝试了php.net上htmlentities下列出的所有内容,并试图找到一些创建异常的解决方案或其他解决方法,但我找不到任何解决方案


有人知道这个问题的解决方法吗

第二条评论回答了这个问题。在连接中添加字符集解决了问题。因此,对于我的PDO连接,我必须这样说:

    function h($string) {
      return htmlentities($string, ENT_SUBSTITUTE, "UTF-8");
    }
    $dbh = new PDO('mysql:dbname=myName;charset=utf8;host=myHost', 'myUser', 'myPassw0rd');

现在一切都正常显示了。

第二条评论回答了这个问题。在连接中添加字符集解决了问题。因此,对于我的PDO连接,我必须这样说:

    function h($string) {
      return htmlentities($string, ENT_SUBSTITUTE, "UTF-8");
    }
    $dbh = new PDO('mysql:dbname=myName;charset=utf8;host=myHost', 'myUser', 'myPassw0rd');

现在一切都正常显示。

我运行了您的代码,它与您的问题和我的工作方式完全一致。请尝试执行初始查询
设置名称utf8
。如果您使用的是mysqli,您可以这样做:
mysqli\u set\u字符集($link,“utf8”)
或者,如果您使用的是PDO,则可以在建立连接时设置编码
“mysql:host=$host;dbname=$db;charset=utf8”
。看看这个问题:如果答案不在下面,我会很惊讶:@Ultimater谢谢!!这么容易,却又这么难找到!实际上,在连接中定义字符集解决了这个问题!我按照您的问题中的方式运行了您的代码,它对我起作用。请尝试执行初始查询
设置名称utf8
。如果您使用的是mysqli,您可以这样做:
mysqli\u set\u字符集($link,“utf8”)
或者,如果您使用的是PDO,则可以在建立连接时设置编码
“mysql:host=$host;dbname=$db;charset=utf8”
。看看这个问题:如果答案不在下面,我会很惊讶:@Ultimater谢谢!!这么容易,却又这么难找到!实际上,在连接中定义字符集解决了这个问题!