小编Dea*_*ean的帖子

删除无效/不完整的多字节字符

我在用户输入上使用以下代码时遇到一些问题:

htmlentities($string, ENT_COMPAT, 'UTF-8');
Run Code Online (Sandbox Code Playgroud)

当检测到无效的多字节字符时,PHP会发出通知:

PHP警告:htmlentities():第123行的/path/to/file.php中的参数中的无效多字节序列

我的第一个想法是压制错误,但这是缓慢而糟糕的做法:http: //derickrethans.nl/five-reasons-why-the-shutop-operator-should-be-avoided.html

我的第二个想法是使用ENT_IGNORE标志,但即使是PHP手册也建议不要使用它:

无声地丢弃无效的代码单元序列,而不是返回空字符串.不鼓励使用此标志,因为它可能具有安全隐患.

还有一点原因让我得到了以下代码:

    // detect encoding
$encoding =  mb_detect_encoding($query);
if($encoding != 'UTF-8') {
    $query = mb_convert_encoding($query, 'UTF-8', $encoding);
} else {
    // strip out invalid utf8 sequences
    $query = iconv('UTF-8', 'UTF-8//IGNORE', $query);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,iconv 在删除/忽略无效字符时也会抛出E_NOTICE:

如果将字符串// TRANSLIT附加到out_charset,则会激活音译.这意味着当一个角色无法在目标字符集中表示时,它可以通过一个或几个相似的字符来近似.如果附加字符串// IGNORE,则会无提示地丢弃无法在目标字符集中表示的字符.否则,从第一个非法字符中删除str,并生成E_NOTICE.

所以我基本上没有选择.我宁愿使用一个久经考验的库来处理这种东西,而不是尝试使用我见过的一些基于正则表达式的解决方案.

因此,这引出了我的最后一个问题: 如何在没有通知/警告/错误的情况下有效,安全地删除无效的多字节字符?

php utf-8 iconv

8
推荐指数
1
解决办法
1万
查看次数

IE6悬停状态不恢复

演示 http://people.mywot.com/dean/tour/ie6test.html

我已将此问题缩小到上面的测试用例中.如果你在IE6中加载它,你会马上发现它.

问题

当鼠标悬停在IE6中的锚点上时,所有可见的后代元素都会变得可见,但是只要您将鼠标悬停在外,所有样式都会保留,但文本会消失.这导致了"鬼盒"并且非常有趣(但是不期望的效果).

我今天早上搜索了几个小时试图找出这是哪个IE6错误,但我没有想法.

PS忽略PNG的透明度.我只是没有在这个演示中包含pngfix.

css internet-explorer-6

5
推荐指数
1
解决办法
237
查看次数

iPad环境中的额外机身高度,没有正文内容(iOS7)

问题:
在横向模式下在iOS7 iPad上加载上面的URL时,会有一个垂直滚动条.有没有身体的内容,它的标准化身体/ HTML保证金/填充.要明确这是我可以提供的最小测试用例,因此缺少内容和空白页面.

演示:http :
//fiddle.jshell.net/AKRCa/show/

我尝试过的事情:
将视口设置为:

<meta name="viewport" content="width=device-width, initial-scale=1.0">
Run Code Online (Sandbox Code Playgroud)

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">`
Run Code Online (Sandbox Code Playgroud)

其他一些信息:
我无法访问运行iOS6的iPad,但我使用browserstack在运行iOS6的iPad3上测试了该演示,并且没有滚动条,所以看起来这个bug仅限于iOS7.

iPhone肖像也没有滚动条,但iPhone风景确实如此.

css landscape ipad ios7

5
推荐指数
1
解决办法
2123
查看次数

typeahead.js没有返回所有结果

我很难找到typeahead.js来返回/渲染我页面上的所有结果.这是我的代码:

var places = new Bloodhound({
    datumTokenizer: Bloodhound.tokenizers.whitespace,
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    remote: {
        url: '/api/place/?country={{ country.id }}&name=%QUERY'
        , transform: function (data) {
            return data.response;
        }
        , wildcard: '%QUERY'
    }
});

var selected = false;
$('.typeahead-place').typeahead({
    hint: true,
    highlight: true,
    minLength: 2
},
{
    name: 'places',
    displayKey: function (obj) {

        if (obj.url != null && obj.url.length && (obj.street == null || obj.street.length == 0)) {
            return obj.name + " (Online store)";
        }

        return obj.name + " (" + obj.street + ", " …
Run Code Online (Sandbox Code Playgroud)

jquery jquery-plugins typeahead.js

5
推荐指数
2
解决办法
4209
查看次数