Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 浏览器显示࿽;而不是´;_Php_Html_Browser_Character Encoding_Special Characters - Fatal编程技术网

Php 浏览器显示࿽;而不是´;

Php 浏览器显示࿽;而不是´;,php,html,browser,character-encoding,special-characters,Php,Html,Browser,Character Encoding,Special Characters,我有一个PHP文件,其中包含以下文本: <div class="small_italic">This is what you´ll use</div> 另一方面: This is what you�ll use 为什么会有差异?我该怎么做才能使它正确地显示(作为撇号) 大家注意(供将来参考) 我实现了Gordon/Gumbo的建议,只是在服务器级别而不是应用程序级别实现了它。请注意,(a)我必须重新启动Apache服务器,更重要的是,(b)我必须用正确编码的正确数据

我有一个PHP文件,其中包含以下文本:

<div class="small_italic">This is what you´ll use</div>
另一方面:

This is what you�ll use
为什么会有差异?我该怎么做才能使它正确地显示(作为撇号)


大家注意(供将来参考)

我实现了Gordon/Gumbo的建议,只是在服务器级别而不是应用程序级别实现了它。请注意,(a)我必须重新启动Apache服务器,更重要的是,(b)我必须用正确编码的正确数据替换现有的“坏数据”

/etc/php.ini


default_charset=“iso-8859-1”

您必须确保内容包含正确的字符集:

发送包含以下内容的内容:

<?php header("Content-Type: text/html; charset=[your charset]"); ?>
正如属性名所示,
httpequiv
相当于http响应头,如果没有设置相应的http头,用户代理应该使用它们

正如Hannes在对问题的评论中已经建议的那样,您可以查看Web服务器返回的头,以查看它所使用的编码。这两台服务器之间可能存在差异。因此,将上面的
[您的字符集]
部分更改为“工作”服务器的部分


有关原因的更详细解释,请将浏览器的字符集设置为定义的值:

比如说,

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

  • 在根目录中创建
    .htaccess
    文件:

    AddDefaultCharset utf-8
    AddCharset utf-8 *
    <IfModule mod_charset.c>
        CharsetSourceEnc utf-8
        CharsetDefault utf-8
    </IfModule>
    
    AddDefaultCharset utf-8
    添加字符集utf-8*
    CharsetSourceEnc utf-8
    字符集默认utf-8
    
  • 替换字符的显示<代码>�(U+FFFD)很可能意味着您将成为Unicode,但您的数据不是

    在这种情况下,如果锐重音
    '
    例如使用进行编码,则使用字节序列0xB4进行编码,因为这是ISO 8859-1中该字符的代码点。但在UTF-8这样的Unicode编码中,该字节序列是非法的。在这种情况下,显示替换字符U+FFFD


    因此,要解决这个问题,请确保您是根据实际情况进行的(反之亦然)。

    这可能是由于您将数据插入到页面中,而PHP的字符编码与页面本身不同(最常见的迭代是拉丁语1和其他UTF-8)


    检查页面和数据库使用的编码。很可能会出现不匹配。

    简单的解决方案是对特殊字符使用ASCII码


    ASCII中撇号字符的值为
    。尝试将此值放入HTML,它应该可以正常工作。

    总结一下:

  • 确保保存在web服务器上的文件具有正确的编码
  • 确保web服务器也使用正确的编码交付它
  • 确保HTML元标记设置为正确的编码
  • 确保使用“标准”特殊字符,即使用“代替”,而不是你想写的“卢克·天行者代码”
  • 对于编码,UTF-8可能对您有好处


    如果这个答案有帮助,请标记为正确或投赞成票。THX对我来说似乎是一个编码问题。无论如何,你为什么不像其他人一样使用
    '
    而不是
    '
    d检查返回文档(标题)的字符集可能有解释,在任何情况下,您都可以使用
    我要补充:这闻起来像单词copy/paste,它不是ASCII撇号x'27'。它可能是windows“left single quote”x'92,仅在MS代码页中受支持。除了此问题的具体建议之外,如果你还没有读过Joel Spolsky的书,我总是建议你读一下:)你怎么知道他的文档是UTF-8格式的?更重要的是:数据似乎不是用UTF-8编码的。@Gordon:我希望先看HTTP,然后看HTML(只有在HTTP中没有指定编码的情况下)中的建议。@Gumbo好的,改变了顺序,虽然我很确定拥有META一点也不害处。它被称为http equiv是有原因的。当没有等效的http头时,用户代理应该使用它。@Gordon:是的,如果在http中指定了字符编码,则元应该没有任何效果。这就是为什么META在某些情况下不够用的原因。ASCII只有一个撇号字符,即0x27。字符参考
    是指Unicode中的字符U+2019右单引号。@Gumbo:右单引号是撇号的正确字符:我猜他的意思是
    是一个纯ascii字符串,而不是它所表示的字符是ascii。@RoToRa:我只是想指出US-ascii只有一个撇号字符,字符引用是指Unicode中的字符。除此之外,U+2019并不是所有语言中正确的印刷撇号。但是是的,它是为英语准备的。
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    
    AddDefaultCharset utf-8
    AddCharset utf-8 *
    <IfModule mod_charset.c>
        CharsetSourceEnc utf-8
        CharsetDefault utf-8
    </IfModule>