2
4

4 回答 4

1

PHP在将序列化位保存到数据库之前,您是否尝试过将其解析为字符串?

parse_str($_POST['field_name'], $php_variable_name);

$php_variable_name在您的插入查询中使用?

希望这可以帮助 :-)

于 2012-08-20T18:20:10.917 回答
1

这似乎是 jQuery 的 serialize() 方法的一个普遍问题。

有一篇文章提出了解决方案,但请务必阅读评论。

http://forum.jquery.com/topic/serialize-problem-with-latin-1-iso-8859-1-and-solution

于 2012-08-20T18:39:26.710 回答
0

JQuery 内部使用encodeURIComponent,无论如何,所有数据都以UTF-8 传输。再试一次 iconv,但使用 UTF-8 转换器。

$f = iconv('UTF-8', 'ISO-8859-1', $_POST['f']);

请注意,MySql 对所有传递的数据进行另一次转换。

于 2012-08-20T18:29:55.607 回答
0

似乎 Javascript 的 encodeURIComponent() 对字符的编码不同于实际的表单提交。最终重写了 javascript encodeURIComponent 函数来解决这个问题......不是最高效的解决方案,但没有其他解决方案出现:

var encodeURIComponent = ( function() {
    var encodeURIComponentOriginal = encodeURIComponent;
    return function ( input ) {
        var toReplace = [
            '%E2%80%9A',
            '%E2%80%A6',
            '%E2%80%98',
            '%E2%80%99',
            '%E2%80%9C',
            '%E2%80%9D',
            '%E2%80%93',
            '%E2%80%94',
            '%E2%84%A2',
            '%C2%A9',
            '%C2%AE',
        ];
        var replaceWith = [
            '%82', // ‚
            '%85', // …
            '%91', // '
            '%92', // '
            '%93', // "
            '%94', // "
            '%96', // –
            '%97', // —
            '%99', // ™
            '%A9', // ©
            '%AE', // ®
        ];               

        var output = encodeURIComponentOriginal( input );

        var length = toReplace.length;

        for ( var i = 0; i < length; i++ ) {
            var regexp = new RegExp( toReplace[i], 'g' );
            output = output.replace( regexp , replaceWith[i] );
        } 

        return output;
    };
} )();
于 2012-08-21T16:07:51.620 回答