php - UTF-8逗号的不同变体? [,] [,] - MySQL 数据的 CURL 响应

标签 php mysql curl encoding

为要插入 MySQL 表的特定数据准备 Curl 响应。

注意到某些 URL 的保存数据中有一些特殊字符。

$curldata = curl_exec($curl);
$encoding = mb_detect_encoding($curldata);

带回了ASCII编码。

好吧,不要这样。

我数据库中的表是 InnoDB 类型,带有 utf8mb4_unicode_ci 排序规则。

将此添加到我的 curl 选项中:

curl_setopt($curl, CURLOPT_ENCODING, 1);

以及基于上述 mb_detect_encoding/$encoding 变量的 iconv 函数。

$curldata = iconv($encoding, "UTF-8", $curldata);

// save to file to test output
file_put_contents('test.html', $curldata);

不确定这是否是解决此问题的最佳方法,但我的 test.html 输出不再包含任何特殊字符编码,所以...(也许)任务完成。

当我解析数据时,我注意到了这个字符。

不是普通的逗号... [比较:,/,]

但表现得像一个人。尝试执行 ctrl+f 并尝试找到一个逗号。它将它们视为相同的,并且都作为 UTF-8 字符 - var_dump(mb_detect_encoding(','));

我查看我的表格行,并将其视为这样插入的行

8,8

如果我尝试搜索 ,,它确实会带回存在 的实例。

反之亦然,如果我搜索,它会带回出现那个和逗号的所有实例。

基本上出于所有意图和目的,它是一个逗号,但显然不是。

这当然是可行的,但相当烦人并且感觉充满了不一致。

谁能解释为什么两个逗号相同,但明显不同?

有没有一种解决方案可以防止这些奇怪的字符进入我的 CURL 响应,或者进一步进入我的 DOM 响应和 PDO 插入。

编辑:

如果相关,

// dom
$dom = new DOMDocument('1.0', 'utf-8');
libxml_use_internal_errors(true);
$dom->preserveWhiteSpace = FALSE;
$dom->loadHTML(mb_convert_encoding($curldata, 'HTML-ENTITIES', 'UTF-8'));

// pdo
$pdoquery = "INSERT INTO `table` (`Attr`) VALUES (?)";
$value = "8,8";
$stmt = $pdo->prepare("INSERT INTO `table` (`Attr`) VALUES (?)");
$stmt->execute([$value]);

编辑 2:

好吧,它似乎是一个FULLWIDTH COMMA..

var_dump(utf8_to_unicode(','));

string '%uff0c' (length=6)

var_dump(utf8_to_unicode(','));

string '%2c' (length=3)

开始变得更有意义了……现在要弄清楚如何防止这些字符进入 curl 响应/DOM/数据库……

最佳答案

您可能需要函数 mb_convert_kana,它可以将不同宽度的字符转换为统一宽度。

$s = 'This is a string with ,, (commas having different widths)';

echo 'original : ', $s, PHP_EOL;
echo 'converted: ', mb_convert_kana($s, 'a');

结果:

original : This is a string with ,, (commas having different widths)
converted: This is a string with ,, (commas having different widths)

PHP 文档:mb_convert_kana
要了解其含义,另请参阅 http://unicode.org/reports/tr11-2/

By convention, 1/2 Em wide characters of East Asian legacy encodings are called "half-width" (or hankaku characters in Japanese), the others are called correspondingly "full-width" (or zenkaku) characters.

关于php - UTF-8逗号的不同变体? [,] [,] - MySQL 数据的 CURL 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55035675/

相关文章:

php - Xdebug 未与 WAMP 一起运行

php - 防止动态 SQL 中的 SQL 注入(inject)

curl - 为什么 CURL --data-urlencode 不进行 URL 编码

PHP - cURL 发布到网站 -> 模拟浏览器(执行 javascript) -> 返回 html 结果

php - Push 正在删除使用 fwrite 创建的文件

php - Zend_Db 和无缓冲查询

php - 当我尝试从 CodeIgniter 中的连接表回显数据时,没有任何反应

mysql - Symfony2 在 Doctrine Fixtures Load 中执行 SQL 文件

php - MySQL插入和更新查询在插入大数据时出错

php - Paypal 使用 PHP cURL 获取交易详细信息