Commit 03202e3
authored
Throw on iconv() failure and default fputcsv escape to empty. (#149)
Three related changes to the row writer in `_generateRow()` /
`_transcode()`:
1. iconv() returning false (e.g. unsupported target encoding,
malformed source bytes) previously got concatenated into the
accumulator where `(string)false === ''` silently produced an
empty row. Now throws a CakeException in `strict` mode.
2. PHP 8.4 deprecates passing a non-empty `$escape` to fputcsv().
The shipped default was the legacy backslash, which triggers
E_DEPRECATED on every render under 8.4+. Default is now `''`
(RFC 4180-compliant: quotes inside a field are escaped by
doubling them rather than by a preceding backslash). Users on
legacy PHP-style escaping can still set `escape => '\\'`.
3. Per review: add a configurable `transcodingMode` option so
apps that cannot fix bad input can opt out of the throw. Three
class-constant values:
- `TRANSCODING_MODE_STRICT` (default): throws on iconv failure.
- `TRANSCODING_MODE_IGNORE`: passes `//IGNORE` to iconv so
unconvertible characters are dropped and the rest of the row
is preserved. For mbstring, `mb_substitute_character('none')`
is set for the duration of the call.
- `TRANSCODING_MODE_TRANSLITERATE`: passes `//TRANSLIT//IGNORE`
so accented Latin etc. transliterate to ASCII; mbstring
falls back to ignore (no transliteration support).
The transcoding logic moves into a new protected `_transcode()`
hook so apps can override the policy per-view.
The iconv warning emitted right before a strict-mode failure is
consumed by a scoped `set_error_handler()` so the user sees the
clear CakeException rather than two near-duplicate signals; this
also keeps PHPUnit's failOnWarning bar happy.
Tests: iconv strict throw, ignore drops unconvertible chars,
transliterate converts accented Latin, and fputcsv default emits
RFC 4180 escaping with no E_DEPRECATED.1 parent 7b69f8a commit 03202e3
2 files changed
Lines changed: 233 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
105 | 105 | | |
106 | 106 | | |
107 | 107 | | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
108 | 132 | | |
109 | 133 | | |
110 | 134 | | |
| |||
137 | 161 | | |
138 | 162 | | |
139 | 163 | | |
140 | | - | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
141 | 168 | | |
142 | 169 | | |
143 | 170 | | |
| |||
148 | 175 | | |
149 | 176 | | |
150 | 177 | | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
151 | 184 | | |
152 | 185 | | |
153 | 186 | | |
| |||
159 | 192 | | |
160 | 193 | | |
161 | 194 | | |
162 | | - | |
| 195 | + | |
163 | 196 | | |
164 | 197 | | |
165 | 198 | | |
| |||
168 | 201 | | |
169 | 202 | | |
170 | 203 | | |
| 204 | + | |
171 | 205 | | |
172 | 206 | | |
173 | 207 | | |
| |||
431 | 465 | | |
432 | 466 | | |
433 | 467 | | |
434 | | - | |
435 | | - | |
436 | | - | |
437 | | - | |
438 | | - | |
439 | | - | |
| 468 | + | |
440 | 469 | | |
441 | 470 | | |
442 | 471 | | |
| |||
461 | 490 | | |
462 | 491 | | |
463 | 492 | | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
| 536 | + | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
464 | 566 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
641 | 641 | | |
642 | 642 | | |
643 | 643 | | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
| 647 | + | |
| 648 | + | |
| 649 | + | |
| 650 | + | |
| 651 | + | |
| 652 | + | |
| 653 | + | |
| 654 | + | |
| 655 | + | |
| 656 | + | |
| 657 | + | |
| 658 | + | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
| 765 | + | |
| 766 | + | |
644 | 767 | | |
0 commit comments