Doc #81284 [Com]: str_getcsv cant parse with multibyte delimiter
| From: | mx03 at volny dot cz | Date: | Fri, 23 Jul 2021 13:40:59 +0000 |
| Subject: | Doc #81284 [Com]: str_getcsv cant parse with multibyte delimiter | ||
| References: | 1 | Groups: | php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-18985@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=81284&edit=1
ID: 81284
Comment by: mx03 at volny dot cz
Reported by: mx03 at volny dot cz
Summary: str_getcsv cant parse with multibyte delimiter
Status: Open
Type: Documentation Problem
Package: Strings related
PHP Version: Irrelevant
Block user comment: N
Private report: N
New Comment:
If the delimiter is a utf8 string, one char is one char, even if it is multibyte.
And the note sounds like str_getcsv support utf8 strings are fully supported.
"The locale settings are taken into account by this function. If LC_CTYPE is e.g. en_US.UTF-8,
strings in one-byte encodings may be read wrongly by this function."
But it is only supported in the $string parameter, and not in the $separator.
There should at least a note that describes this problem like with strlen only reads the amount of
bytes.
Previous Comments:
------------------------------------------------------------------------
[2021-07-23 13:23:53] cmb@php.net
Well, documentation says "one character", what is misleading.
------------------------------------------------------------------------
[2021-07-23 13:22:22] cmb@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
------------------------------------------------------------------------
[2021-07-23 13:01:13] mx03 at volny dot cz
Description:
------------
Separator can be only one character that is not multibyte.
if setlocale is utf8, it cant parse the csv:
https://3v4l.org/MiD3B
if setlocale is not utf8, it parses the string, but the result has the 2 additional bytes:
https://3v4l.org/ohc4Q
Test script:
---------------
setlocale(LC_CTYPE, "en_US.UTF-8");
$test = "â¤";
$line = "test1â¤test2â¤test3";
$header = str_getcsv($line, $test);
var_dump($header);
Expected result:
----------------
array(3) {
[0]=>
string(5) "test1"
[1]=>
string(7) "test2"
[2]=>
string(7) "test3"
}
Actual result:
--------------
array(1) {
[0]=>
string(21) "test1â¤test2â¤test3"
}
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=81284&edit=1