2011-08-18 36 views
1

我开始有编码问题,它似乎以某种方式记事本+ +改变了编码或东西。无论如何,所有以UTF-8编码的文件,但我检查了一些没有BOM的文件更改为UTF-8。将其中一个更改为UTF-8修复了特殊字符问题。错误:“无法发送会话缓存限制器”相关的编码

"Tageá"改为"Tageá"但我开始了一个错误:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/content/02/6945202/html/usuario/index.php:1) in /home/content/02/6945202/html/usuario/index.php on line 1 

这是第1行:

<? session_start(); ?> 

我不明白为什么我有这个问题,因为使用ANSI或没有BOM的UTF-8页面显示没有错误。

可能是什么问题?谢谢

+0

这是因为PHP在该识别UTF8开始发送UTF编码字符。 – Dani

+0

使用正确的内容类型“charset ='参数(webserver或php.ini)而不是UTF-8 BOM。 – mario

回答

0

http://blog.onitindustries.com/php/errors/php-session_start-on-first-line-still-getting-error/

OK尝试使用此功能将字符串转换,保存文件为UTF-8无BOM这一点。而不改变文件编码为UTF8无BOM,因为它是在session_start之前产生空间

<?php 
session_start(); 
function charset_decode_utf_8 ($string) { 
    /* Only do the slow convert if there are 8-bit characters */ 
    /* avoid using 0xA0 (\240) in ereg ranges. RH73 does not like that */ 
    if (! ereg("[\200-\237]", $string) and ! ereg("[\241-\377]", $string)) 
     return $string; 

    // decode three byte unicode characters 
    $string = preg_replace("/([\340-\357])([\200-\277])([\200-\277])/e",  
    "'&#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'",  
    $string); 

    // decode two byte unicode characters 
    $string = preg_replace("/([\300-\337])([\200-\277])/e", 
    "'&#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'", 
    $string); 

    return $string; 
} 
echo charset_decode_utf_8('Tageá'); 
?> 
+0

这很可能是,但是当我没有BOM保存时,我在整个网站上都会得到很多随机的额外字符。 http://chusmix.com/top/?ciudad=Pilar 也许这是一个记事本++的问题 – lisovaccaro

+0

你可以保存为utf-8没有bom然后做我在更新的答案吗?...嗯嗯划伤那个主意。它从字符串中删除ƒ。 –

+0

已更新的答案。 –

0

这通常是由您进行上述调用之前有一些输出引起的。发生这种情况是因为输出必须位于标题之后,所以如果有输出,则会发送标题。空格将导致这种情况发生,甚至可能是由PHP标记之前或之后的空格或换行符引起的。

要解决此问题,您可以在此调用之前消除所有输出,但这通常不可行。

更好的解决方案是在你的php.ini中启用output_buffering。

0

转换字符编码()

相关问题