我们销售的可配置产品需要具有字符限制的文本字段(我们销售带有客户名称的个性化手镯)。
因此,我们在产品页面上创建了一个限制为15个字符的文本字段。
如果我把这个feld放在例如:“abcdefghijklmno”(这是15个字母)中,它就完美了。
但是,如果我把“abcdéfghijklmno”(仍然是15个字母,但“e”为急性),它就行不通,它说“请指定产品选项”。
经过几次测试后,我发现带有重音的字母被计为2个字符。
如何避免此错误?
答案 0 :(得分:1)
ÉÉÉ
使用html_entity_decode($string);
$example = html_entity_decode("abcdéfghijklmno");
print_r($example);
尝试学习htmlentities和html_entity_decode
如果你想替换所有急性,
在指定产品选项之前,您必须创建一个列表并str_replace它 url_encode
答案 1 :(得分:0)
这很可能是字符编码问题 - 例如UTF-8与Latin1。
您没有提到您正在使用的编程语言。猜测它是一个网络应用程序并且它是PHP的可能性,您可以使用mb_strlen
(计算字符)而不是strlen
(计算字节强>)。
如果它不是PHP,其他编程语言具有相似的功能来计算字符而不是字节。
答案 2 :(得分:0)
我也找到了解决方案:
您必须编辑此文件:app / code / core / Mage / Catalog / Model / Product / Option / Type / Text.php
替换(第49行附近):
if (strlen($value) == 0 && $option->getIsRequire() && !$this->getProduct()->getSkipCheckRequiredOption()) { $this->setIsValid(false); Mage::throwException(Mage::helper('catalog')->__('Please specify the product\'s required option(s).')); } if (strlen($value) > $option->getMaxCharacters() && $option->getMaxCharacters() > 0) { $this->setIsValid(false); Mage::throwException(Mage::helper('catalog')->__('The text is too long'));
by:
if (mb_strlen($value,'UTF-8') == 0 && $option->getIsRequire() && !$this->getProduct()->getSkipCheckRequiredOption()) { $this->setIsValid(false); Mage::throwException(Mage::helper('catalog')->__('Please specify the product\'s required option(s).')); } if (mb_strlen($value,'UTF-8') > $option->getMaxCharacters() && $option->getMaxCharacters() > 0) { $this->setIsValid(false); Mage::throwException(Mage::helper('catalog')->__('The text is too long'));