【问题标题】:Shopify PHP API: support for diacriticsShopify PHP API:支持变音符号
【发布时间】:2012-06-13 15:01:59
【问题描述】:

我正在使用Shopify PHP API。没有变音符号的产品工作正常,并被添加。当我尝试发送带有捷克变音符号 (ěščřžýáíé) 的产品时,会显示错误:

Fatal error: Uncaught exception 'ShopifyApiException' with message
'Unprocessable Entity' in C:\webdev\www\shopify-api-doporucene\shopify.php on line 32

ShopifyApiException: Unprocessable Entity in C:\webdev\www\shopify-api-doporucene\shopify.php on line 32

我在本地主机上使用 Wamp。我试过json_encode,但它不起作用。有谁知道我该如何解决这个问题?

我的 PHP 代码(此示例中删除了 API 密钥):

    require 'shopify.php'; 

    $shops_myshopify_domain = "hyatt-ryan2200.myshopify.com"; 

    $api_key = ""; 

    $shared_secret = ""; 

    $shops_token = ""; 

    // For regular apps: 
    $shopify = shopify_api_client($shops_myshopify_domain, $shops_token, $api_key, $shared_secret); 

   $newproduct = array 
   ( 
      "product"=>array 
       ( 
           "title"=>"Product title (works fine without diacritics)", 
           "body_html"=>"Super Duper Plan", 
           "vendor"=>"Vendor", 
            "product_type"=>"Test" 
        ) 
    ); 

// All requests accept an optional fourth parameter, that is populated with the response headers. 
$senditem = $shopify('POST', '/admin/products.json', $newproduct, $response_headers);

【问题讨论】:

  • 您是否尝试过修改title 以在您的PHP 中包含重音字符?我从您的问题中推测产品名称来自 AJAX 操作 - 这可能会损坏您的 UTF-8 数据。还要检查你的 PHP 文件中是否包含 UTF8 字符串,它是用 UTF-8 编码的 - 检查你的编辑器。
  • 产品在 PHP 文件中(见上文,$newproduct)。 Ediotor 是在 UTF-8 中设置的。当我用记事本打开它并将其保存为 UTF8 时,有废话通过 API 发送到 eShop:“Testovacu00ed zbou017eu00ed”(原始 Testovací zboží”)。
  • 对,它使用 JSON 进行服务器到服务器的通信。好的,尝试print_r($newproduct) 并将其输出到浏览器(希望您也有 UTF-8 渲染!),看看它是否正常。在这个变量上使用json_encode实际上有什么不同?
  • 另外,该库似乎提供curl_setopts_() - 我想知道您是否可以设置 UTF-8 编码选项?
  • 输出:数组([产品] => 数组([标题] => Testovací zboží zkouším znovu nastavit [body_html] => 正文标题 [供应商] => 供应商 [product_type] => 滑雪板)) //UTF渲染就OK了。 json_encode 包含在 shopify.php 中,我通过 requre 调用它。

标签: php json api diacritics shopify


【解决方案1】:

前提:我从@Sarke的cmets开始,所以这个问题会有答案。

你可以试试

$newproduct = array 
   ( 
      "product"=>array 
       ( 
           "title"=>"Product title (with ot without diacritics)", 
           "body_html"=>"Super Duper Plan", 
           "vendor"=>"Vendor", 
            "product_type"=>"Test" 
        ) 
    ); 

foreach($newproduct["product"] as $k => $v){
    $newproduct["product"][$k] = iconv("UTF-8", "ISO-8859-2", $v);
}

使用 ISO-8859-2 编码值创建一个 $newproduct 数组,与 shopify 服务器保持一致。

【讨论】:

    【解决方案2】:

    当您使用 WAMP 时,请尝试以这种方式包含或更改 PHP.ini 文件:

    ; PHP's default character set is set to empty.
    ; http://php.net/default-charset
    default_charset = "utf-8"
    

    如果每个东西都使用相同的字符集(UTF-8 是 shopify 的情况),过去可以通过检查端到端来解决字符集问题。重要提示:更改后重新加载 WAMP。

    【讨论】:

      猜你喜欢
      • 2019-08-04
      • 2011-12-09
      • 2020-12-08
      • 2016-05-03
      • 2011-09-28
      • 2013-06-29
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      相关资源
      最近更新 更多