2017-01-27 3 views
4

Я работаю над woocommerce api, чтобы добавить заказ вручную.как преобразовать странный текст в определенное слово

Я заказал вариант продукт вручную, и он показывает хорошую страницу редактирования прав в стороне администратора.

Теперь проблема заключается в использовании сайта с использованием плагина polylang.

В этом случае существует два языка. Я могу успешно добавить заказ на английский язык.

Но когда я попытался добавить товар на другой язык (арабский). Он возвращает некоторые детали заказа в странном текстовом формате. В моем API возвращает:

"product_variation_details": "%d8%a7%d9%84%d8%ad%d8%ac%d9%85: صغير" 

В странице заказа редактирования он показывает в надлежащем порядке: enter image description here

я использовал ниже код, чтобы получить информацию о заказе в API:

$variation_id = $single_items['item_meta']['_variation_id'][0]; 
if ($variation_id != 0) { 
    $variation = wc_get_product($variation_id);     
    $product_variation_details = wc_get_formatted_variation($variation->get_variation_attributes(), true); 
} 

У меня есть поиск много, но не может получить лучшее решение. любая помощь будет изложена. заранее спасибо.

+0

В чем вопрос? если имя продукта печатается правильно, где вам нужно имя декодировано? – yivi

+0

@yivi Я работаю над API. В то время я столкнулся с этой проблемой. – vrajesh

+1

Непонятно, что вы здесь задаете. Пожалуйста, не могли бы вы уточнить, что вы ожидаете, и как оно отличается от того, что произошло? Я не уверен, что здесь достаточно информации, чтобы исправить это для вас; проблема, скорее всего, в коде, который вы не включили. – Rich

ответ

9

Кажется, что происходит некоторое декодирование. Urldecode

Если я везу данную строку и распечатать его urldecoded возвращает это:

print urldecode("%d8%a7%d9%84%d8%ad%d8%ac%d9%85"); 
الحجم 

Я надеюсь, что это помогает

2

Попробуйте заменить все внутри вашего if с:

$variation = wc_get_product($variation_id); 
$variation_attributes = $variation->get_variation_attributes(); 
$variation_attributes_decoded = array(); 

foreach ($variation_attributes as $name => $value) { 
    $decoded_name = rawurldecode($name); 
    $variation_attributes_decoded[ $decoded_name ] = $value; 
} 

$product_variation_details = wc_get_formatted_variation($variation_attributes_decoded, true); 

Это не проверено.

Это линия от wc_get_formatted_variation(), который выводит текст в вопрос:

$variation_list[] = wc_attribute_label(str_replace('attribute_', '', $name)) . ': ' . rawurldecode($value); 

Как вы можете видеть, это декодирование $value но не $name. Мое решение должно расшифровать $name раньше времени.

Редактировать: исправлена ​​ошибка кода.

Смежные вопросы