相关疑难解决方法(0)

PHP:如何删除字符串中的所有不可打印字符?

我想我需要删除0-31和127的字符,

是否有一个函数或一段代码来有效地执行此操作.

php ascii utf-8

147
推荐指数
11
解决办法
20万
查看次数

PHP:在不知道原始字符集的情况下将任何字符串转换为UTF-8,或者至少尝试

我有一个应用程序来处理来自世界各地的客户,当然,我希望进入我的数据库的所有内容都是UTF-8编码的.

对我来说主要的问题是我不知道任何字符串的来源是什么编码 - 它可以来自文本框(使用<form accept-charset="utf-8">仅在用户实际提交表单时才有用),或者它可能是从上传的文本文件,所以我真的无法控制输入.

我需要的是一个函数或类,它确保进入我的数据库的内容尽可能采用UTF-8编码.我已经尝试iconv(mb_detect_encoding($text), "UTF-8", $text); 但是有问题(如果输入是'fiancée'它返回'fianc').我尝试了很多东西= /

对于文件上传,我喜欢要求最终用户指定他们使用的编码,并向他们展示输出结果的预览,但这对于讨厌讨厌的黑客没有帮助(事实上,它可以使他们的生活更容易一点).

我已经阅读了关于这个主题的其他SO问题,但它们似乎都有微妙的差异,例如"我需要解析RSS提要"或"我从网站上搜集数据"(或者,实际上,"你不能").

但必须有一些东西至少有一个好的尝试!

php utf-8 character-encoding

143
推荐指数
4
解决办法
27万
查看次数

json_encode返回NULL?

由于某种原因,项目"description"返回NULL以下代码:

<?php
include('db.php');

$result = mysql_query('SELECT * FROM `staff` ORDER BY `id` DESC LIMIT 2') or die(mysql_error());
$rows = array();
while($row = mysql_fetch_assoc($result)){
    $rows[] = $row;
}

echo json_encode($rows);
?>
Run Code Online (Sandbox Code Playgroud)

这是我的数据库的架构:

CREATE TABLE `staff` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` longtext COLLATE utf8_unicode_ci,
  `description` longtext COLLATE utf8_unicode_ci,
  `icon` longtext COLLATE utf8_unicode_ci,
  `date` longtext COLLATE utf8_unicode_ci,
  `company` longtext COLLATE utf8_unicode_ci,
  `companyurl` longtext COLLATE utf8_unicode_ci,
  `appurl` longtext COLLATE utf8_unicode_ci,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Run Code Online (Sandbox Code Playgroud)

以下是页面上的回显: …

php null json

117
推荐指数
6
解决办法
11万
查看次数

如何从JavaScript字符串中删除无效的UTF-8字符?

我想从JavaScript中的字符串中删除所有无效的UTF-8字符.我试过这个JavaScript:

strTest = strTest.replace(/([\x00-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3})|./g, "$1");

似乎这里描述的UTF-8验证正则表达式(已删除链接)更完整,我以相同的方式调整它:

strTest = strTest.replace(/([\x09\x0A\x0D\x20-\x7E]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})|./g, "$1");

这两段代码似乎都允许有效的UTF-8通过,但是我的测试数据中几乎没有过滤任何坏的UTF-8字符:UTF-8解码器功能和压力测试.要么坏字符没有变化,要么删除了一些字节,从而创建一个新的无效字符.

我不是很熟悉UTF-8标准或JavaScript中的多字节,所以我不确定我是否未能在正则表达式中表示正确的UTF-8,或者我是否在JavaScript中不正确地应用该正则表达式.

编辑:根据Tomalak的评论为我的正则表达式添加了全局标志 - 但是这仍然不适合我.根据bobince的评论,我放弃了在客户端这样做.

javascript regex utf-8

21
推荐指数
5
解决办法
6万
查看次数

使用声明的encoding = utf-8 - Java从xml中删除非UTF-8字符

我必须在Java中处理这种情况:

我从声明为encoding = utf-8的客户端获取XML格式的请求.不幸的是,它可能不包含utf-8字符,并且需要从我这边的xml中删除这些字符(遗留).

让我们考虑这个无效XML包含£(磅)的示例.

1)我得到xml作为带有£的java字符串(我现在没有访问接口,但我可能得到xml作为java字符串).我可以使用replaceAll(£,"")来摆脱这个角色吗?任何潜在的问题?

2)我得到xml作为字节数组 - 在这种情况下如何安全地处理这个操作?

java xml encoding utf-8

17
推荐指数
3
解决办法
5万
查看次数

如何删除不适合MySQL中utf8编码的错误字符?

我有脏数据.有时它包含像字符这样.我使用这些数据来进行查询

WHERE a.address IN ('mydatahere')
Run Code Online (Sandbox Code Playgroud)

对于这个角色我得到了

org.hibernate.exception.GenericJDBCException:操作'IN'的非法混合排序(utf8_bin,IMPLICIT),(utf8mb4_general_ci,COERCIBLE),(utf8mb4_general_ci,COERCIBLE)

如何过滤掉这样的字符?我用的是Java.

谢谢.

java mysql unicode utf-8

16
推荐指数
3
解决办法
5万
查看次数

正则表达式从UTF8字符串中删除非字母数字字符

如何以多字节安全方式从字符串中删除字符,如标点符号,逗号,短划线等?

我将使用来自许多不同语言的输入,我想知道是否有什么东西可以帮助我

谢谢

php regex

13
推荐指数
1
解决办法
9782
查看次数

PHP,MySQL和XML =乱码HTML输出

我在MySQL中有一个类型为text的字段,使用以下排序规则:utf8_general_ci.

使用使用DOMDocument构建的变量填充此XML字段:

function ed_audit_node($dom, $field, $new, $old){

    //create audit_detail node
    $ad = $dom->createElement('audit_detail');

    $fn = $dom->createElement('fieldname');
    $fn->appendChild($dom->createTextNode($field));
    $ad->appendChild($fn);

    $ov = $dom->createElement('old_value');
    $ov->appendChild($dom->createTextNode($old));
    $ad->appendChild($ov);

    $nv = $dom->createElement('new_value');
    $nv->appendChild($dom->createTextNode($new));
    $ad->appendChild($nv);

    //append to document
    return $ad;
}
Run Code Online (Sandbox Code Playgroud)

这是我如何保存到db($ xml来自$ dom-> saveXML()):

function ed_audit_insert($ed, $xml){
    global $visitor;

    $sql = <<<EOF
    INSERT INTO ed.audit
    (employee_id, audit_date, audit_action, audit_data, user_id) 
    VALUES (
        {$ed[emp][employee_id]}, 
        now(), 
        '{$ed[audit_action]}', 
        '{$xml}', 
        {$visitor[user_id]}
    );      
EOF;
    $req = mysql_query($sql,$ed['db']) or die(db_query_error($sql,mysql_error(),__FUNCTION__));
//snip  
}
Run Code Online (Sandbox Code Playgroud)

请参阅一个较旧的,平行的,稍微相关的关于我如何创建此XML的线程: 另一个PHP XML解析错误:"输入不正确的UTF-8,表示编码!"

有效: - 查询数据库,选择字段并使用jQuery(.ajax())输出并填充textarea.Firebug和textarea匹配数据库中的内容(与Toad确认).

什么不起作用 …

php xml utf-8 character-encoding

6
推荐指数
1
解决办法
1417
查看次数

用问号替换无效的UTF-8字符,mbstring.substitute_character似乎被忽略了

我想用引号替换无效的UTF-8字符(PHP 5.3.5).

到目前为止,我有这个解决方案,但删除了无效字符,而不是被'?'取代.

function replace_invalid_utf8($str)
{
  return mb_convert_encoding($str, 'UTF-8', 'UTF-8');
}

echo mb_substitute_character()."\n";

echo replace_invalid_utf8('éééaaaàààeeé')."\n";
echo replace_invalid_utf8('eeeaaaaaaeeé')."\n";
Run Code Online (Sandbox Code Playgroud)

应输出:

63 // ASCII code for '?' character
???aaa???eé // or ??aa??eé
eeeaaaaaaeeé
Run Code Online (Sandbox Code Playgroud)

但目前产出:

63
aaaee // removed invalid characters
eeeaaaaaaeeé
Run Code Online (Sandbox Code Playgroud)

有什么建议?

你会用另一种方式(preg_replace()例如使用?)

谢谢.

php utf-8 character-encoding mbstring

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

替换非utf8字符

我想允许所有 utf8 字符,但想用空格或 - 替换非 utf8

这是字符串

Punjab me 1Train k niche 100 Sardar aa gaye..

99 Mar gaye...

1 Bach gaya
Run Code Online (Sandbox Code Playgroud)

无论我做什么,它都不会在火车后插入

它在火车上的修剪

我已经尝试过这两个链接

我想要完整的 utf8 范围插入 mysql 并用空格或 - 替换非 utf8

$string = preg_replace('/[^(\x20-\x7F)]*/','', $string);
Run Code Online (Sandbox Code Playgroud)

适用于上述情况,但当我使用印地文/中文时,它也会替换它。所以我不能使用上面的代码

php regex mysql utf-8

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

一些不清楚的PHP语法

我是一名PHP初学者,在论坛上看到了这个PHP表达式:

我的PHP版本是5.2.X()

$regex = <<<'END'
/
  ( [\x00-\x7F]                 # single-byte sequences   0xxxxxxx
  | [\xC0-\xDF][\x80-\xBF]      # double-byte sequences   110xxxxx 10xxxxxx
  | [\xE0-\xEF][\x80-\xBF]{2}   # triple-byte sequences   1110xxxx 10xxxxxx * 2
  | [\xF0-\xF7][\x80-\xBF]{3}   # quadruple-byte sequence 11110xxx 10xxxxxx * 3 
  )
| ( [\x80-\xBF] )               # invalid byte in range 10000000 - 10111111
| ( [\xC0-\xFF] )               # invalid byte in range 11000000 - 11111111
/x
END;
Run Code Online (Sandbox Code Playgroud)

这段代码是否正确?做这些怪一样(对我来说)结构<<<,'END',/,/x,和END;是什么意思?

我的PHP版本不支持nowdoc,我应该如何替换这个表达式?没有引号'END'$ regex成了NULL …

php syntax nowdoc

0
推荐指数
2
解决办法
278
查看次数

标签 统计

php ×8

utf-8 ×8

character-encoding ×3

regex ×3

java ×2

mysql ×2

xml ×2

ascii ×1

encoding ×1

javascript ×1

json ×1

mbstring ×1

nowdoc ×1

null ×1

syntax ×1

unicode ×1