Site Search
Tel.: +49 (0) 271 / 55 130 91
Mail: info@olivertempel.de

iconv_substr Error

14.06.2010
Von: Oliver Tempel

iconv_substr Error oder PDF Rechnung und einstellige Artikelnummern


Wenn ein Artikel in Magento als Artikelnummer einstellig ist, dann kann es zu Problemen bei der PDF Rechnung kommen und folgende Fehlermeldung auftreten:

  1.  
  2. a:2:{i:0;s:198:"Notice: iconv_substr() [<a href='function.iconv-substr'>function.iconv-substr</a>]: Unknown error (0)  in app/code/core/Mage/Core/Helper/String.php on line 172";i:1;s:1628:"#0 app/code/core/Mage/Core/Helper/String.php(172): mageCoreErrorHandler(8, 'iconv_substr() ...', '/var/www/vhosts...', 172, Array)
  3. app/code/local/Symmetrics/InvoicePdf/Model/Pdf/Items/Default.php(33): Mage_Core_Helper_String->str_split('1', 0, 10, 'UTF-8')
  4. app/code/local/Symmetrics/InvoicePdf/Model/Pdf/Invoice.php(552): Symmetrics_InvoicePdf_Model_Pdf_Items_Default->draw('1', 10)
  5. app/code/local/Symmetrics/InvoicePdf/Model/Pdf/Invoice.php(114): Symmetrics_InvoicePdf_Model_Pdf_Invoice->_drawItem(1)
  6. app/code/core/Mage/Adminhtml/Controller/Sales/Invoice.php(86): Symmetrics_InvoicePdf_Model_Pdf_Invoice->getPdf(Object(Mage_Sales_Model_Order_Invoice_Item), Object(Zend_Pdf_Page), Object(Mage_Sales_Model_Order), 1)
  7. app/code/core/Mage/Core/Controller/Varien/Action.php(376): Mage_Adminhtml_Controller_Sales_Invoice->printAction(Array)
  8. app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(248): Mage_Core_Controller_Varien_Action->dispatch()
  9. app/code/core/Mage/Core/Controller/Varien/Front.php(158): Mage_Core_Controller_Varien_Router_Standard->match('print')
  10. app/Mage.php(459): Mage_Core_Controller_Varien_Front->dispatch(Object(Mage_Core_Controller_Request_Http))
  11. index.php(65): Mage::run()
  12. {main}";}
  13.  


Anschließend habe ich mir mal die inconv_substr() Funktion von PHP angeschaut.
Dabei habe ich festgestellt, das die Funktion bekanntermaßen einen Fehler dropt bei Zeichenketten der Länge 1.

Um das zu verifizieren habe ich dem Testartikel eine neue Artikelnummer zugewiesen (ABC-1), das Produkt bestellt, Rechnung erstellt und Voila, das PDF konnte erstellt werden.

Um in Zukunft von diesem Problem verschont zu bleiben habe ich die Funktion in der Datei String.php wie folgt angepasst:

  1.  
  2. public function str_split($str, $length = 1, $keepWords = false, $trim = false, $wordSeparatorRegex = '\s') {
  3.          [...]
  4.          Zeile 172 : $len      = strlen($str);
  5.          Zeile 173 : $result[] = $len &amp;gt; 1 ? iconv_substr($str, $offset, $length, self::ICONV_CHARSET): $str;
  6.          [...]
  7.          }
  8.  

Ich frage nun die Stringlänge ab und bei einer Stringlänge von 1 wird der normale String zurückgegeben.

Wenn Ihr nicht am Code rumspielen wollt, dann merkt euch einfach:

NUTZT KEINE EINSTELLIGEN ARTIKELNUMMERN