2014-03-04 59 views
0

我有问题更新到PHP 5.4.4,因为我的数据库记录显示在浏览器中有错误。 我搜索了很多人说他们必须修复他们的代码,但没有人说他们提供了哪些修复。PHP 5.2.17到PHP 5.4.4编码问题

因此,因为我不是一位PHP专家,所以我在这里请求帮助以正确的方式指向我。

我想要什么 “A E I Oú”

<form id="editar" accept-charset="UTF-8" action="javascript:void(0)" method="post"> 

上提交我的PHP做这个

$txt_edi = htmlspecialchars($_POST['text_to_edit'], ENT_QUOTES, 'ISO-8859-1'); 
$query = $ligacao -> prepare("UPDATE mytable SET description = '".utf8_encode($txt_edi)."' "); 

OK,在PHP 5.2.17我的MySQL记录就像“âÃóú”

在PHP 3.4.4我的mysql记录是这样的“áéíóúú”

所以我假设的东西在函数utf8_encode已经改变了,否则我的纪录将在两个PHP vertions一样...

注意,如果我不第三个参数添加到PHP的htmlspecialchars 5.4.4我的字符串变成空的(如果我更改为UTF-8,它也变为空),在5.2.17中它没有问题地进入数据库。

+1

如果你不使用utf8_decode怎么办?你的网站使用什么编码? –

+0

为什么你解码utf8你不需要UTF8的é。 –

+0

没有utf8_decode我得到这个:Fichasté©cnicas,我​​需要utf8_encode /解码,因为我的母语使用áéíóúçã等。所以为了避免出现问题,我的数据库记录被编码为 – Pluda

回答

2

我的教育猜测(鉴于你惊人的代码缺乏)是你使用htmlspecialchars()。该功能已经改变为它的第三参数的默认值在PHP/5.4-从ISO-8859-1UTF-8

编码

从PHP 5.6.0,default_charset值作为默认值。 从PHP 5.4.0开始,UTF-8是默认的。 5.4.0之前的PHP,默认使用ISO-8859-1。虽然这种说法在技术上是可选的,但您极力鼓励您为 指定正确的代码值。

解决方案:始终提供第三个参数。


编辑:是否有更新的问题

应用(据说)一些杂感采用ISO-8859-1,但你强制浏览器转换为UTF-8:

accept-charset="UTF-8" 

当您收到表格时,您将其处理为好像它是ISO-8859-1(它不是):

htmlspecialchars($_POST['text_to_edit'], ENT_QUOTES, 'ISO-8859-1') 

最后,你从假ISO-8859-1转换为UTF-8:

utf8_encode($txt_edi) 

...你注入不可信输入到SQL语句:

"UPDATE mytable SET description = '".utf8_encode($txt_edi)."' " 

...即使你的数据库类显然支持预处理语句:

$query = $ligacao -> prepare(...) 

在这段代码没有说明原来的问题(显示数据)的问题,但我有,要么在PHP/5.2纯属偶然作品印象或数据库中的东西已经损坏(或两者)。

此时,我通常会建议将所有内容切换为UTF-8,并永远忘记编码和转换。但是还有一个额外的问题:您在存储在数据库中之前将转换为HTML

所以,对不起,我完全失去了。如果您认为它不“有用”,我会很乐意删除这个答案。

+0

对不起,由于缺少代码,我真的不知道要发布什么。是的,我已经有了专门的产品,不是我给出的例子,而是其余的项目。我添加了htmlspecialchars($ html,ENT_QUOTES,'ISO-8859-1');它允许我编辑条目来纠正它们,但它们太多了......我需要找到一种兼容的方式来使这项工作成为可能既5.2.xxx和较新的PHP版本,因为我的网络服务器是5.2.xx和我的本地主机是5.4.4 – Pluda

+0

我不明白你的评论,但你的描述表明,这不是问题。事实上,在'htmlspecialchars()'中使用错误的编码通常会使整个字符串消失。我怀疑你在任何地方都依赖于默认编码,并且你还升级了Apache和MySQL。 –

+0

我相信Apache和MySql是一样的,因为我使用的MAMP允许我在本地主机上从5.2.17切换到5.4.4。我正在编辑我的帖子,看看它是否清理了一些东西,你能在几分钟内看看吗?谢谢 – Pluda