الحصول على â € بدلاً من الفاصلة الافتتاحية (') في PHP

StackOverflow https://stackoverflow.com/questions/2292004

سؤال

لقد حاولت تحويل النص إلى أو من UTF8 ، والذي لا يبدو أنه يساعد.

انا احصل:

"It’s Getting the Best of Me"

يجب أن يكون:

"It’s Getting the Best of Me"

أحصل على هذه البيانات من هذا عنوان URL.

هل كانت مفيدة؟

المحلول

للتحويل إلى كيانات HTML:

<?php
  echo mb_convert_encoding(
    file_get_contents('http://www.tvrage.com/quickinfo.php?show=Surviver&ep=20x02&exact=0'),
    "HTML-ENTITIES",
    "UTF-8"
  );
?>

انظر مستندات ل mb_convert_encoding لمزيد من خيارات الترميز.

نصائح أخرى

تأكد من تحديد رأس HTML الخاص بك UTF8

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

هذا عادة ما يفعل الخدعة بالنسبة لي (من الواضح إذا كان المحتوى UTF8).

لا تحتاج إلى تحويل كيانات HTML إذا قمت بتعيين نوع المحتوى.

المحتوى الخاص بك على ما يرام. المشكلة هي مع الرؤوس التي يرسلها الخادم:

Connection:Keep-Alive
Content-Length:502
Content-Type:text/html
Date:Thu, 18 Feb 2010 20:45:32 GMT
Keep-Alive:timeout=1, max=25
Server:Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.7 with Suhosin-Patch
X-Powered-By:PHP/5.2.4-2ubuntu5.7

يجب ضبط نوع المحتوى على Content-type: text/plain; charset=utf-8, ، لأن هذه الصفحة ليست HTML وتستخدم ترميز UTF-8. يخمن chromium on Mac ISO-8859-1 ويعرض الأحرف التي تصفها.

إذا لم تكن تتحكم في الموقع ، فحدد الترميز كـ UTF-8 لأي وظيفة تستخدمها لاسترداد المحتوى. لست على دراية بما يكفي مع PHP لمعرفة كيف بالضبط.

أعلم أن السؤال تم الإجابة عليه ، لكن تعيين علامة التعريف لم يساعد في حالتي ولم يكن الإجابة المحددة واضحة بما فيه الكفاية ، لذلك أردت تقديم إجابة أبسط.

حتى تبقيها بسيطة ، قم بتخزين السلسلة في متغير وعملية مثل هذا

$TVrageGiberish = "It’s Getting the Best of Me";

$notGiberish = mb_convert_encoding($TVrageGiberish, "HTML-ENTITIES", 'UTF-8');

echo $notGiberish;

الذي يجب أن يعيد ما تريد It’s Getting the Best of Me

إذا كنت تقوم بتحليل شيء ما ، فيمكنك إجراء التحويل أثناء تعيين القيم لمتغير مثل هذا ، حيث $TVrage مصفوفة مع جميع القيم ، XML في هذا المثال من الخلاصة التي تحتوي على علامة "عنوان" قد تحتوي على أحرف خاصة مثل ‘ أو ’.

$cleanedTitle = mb_convert_encoding($TVrage->title, "HTML-ENTITIES", 'UTF-8');

إذا كنت هنا لأنك تواجه مشكلات مع الأحرف غير المرغوب فيها في موقع WordPress الخاص بك ، فحاول:

  1. فتح wp-config.php

  2. تصريح علني define('DB_CHARSET', 'utf8') و define('DB_COLLATE', '')

    /** MySQL hostname */
    define('DB_HOST', 'localhost');
    
    /** Database Charset to use in creating database tables. */
    //define('DB_CHARSET', 'utf8');
    
    /** The Database Collate type. Don't change this if in doubt. */
    //define('DB_COLLATE', '');
    

يبدو أنك تستخدم وظائف السلسلة القياسية على أحرف UTF8 (') غير موجودة في ISO 8859-1. تحقق من أنك تستخدم يونيكود متوافق إعدادات ووظائف PHP. انظر أيضا متعددة وظائف السلسلة.

إذا كان كل شيء يبدو أنه لا يعمل ، فقد يكون هذا أفضل حل لك.

<?php
$content="It’s Getting the Best of Me";
$content = str_replace("’", "&#39;", $content);
echo $content;
?>

== أو ==

<?php
$content="It’s Getting the Best of Me";
$content = str_replace("’", "'", $content);
echo $content;
?>

نظرت إلى الرابط ، ويبدو أن UTF-8 بالنسبة لي. أي ، في Firefox ، إذا اخترت View ، فإن ترميز الأحرف ، UTF-8 ، سيظهر بشكل صحيح.

لذلك ، تحتاج فقط إلى معرفة كيفية الحصول على رمز PHP الخاص بك لمعالجة ذلك كـ UTF-8. حظا طيبا وفقك الله!

جرب هذا :

html_entity_decode(mb_convert_encoding(stripslashes($text), "HTML-ENTITIES", 'UTF-8'))

لقد نجحنا في الذهاب إلى الاتجاه الآخر باستخدام هذا:

mb_convert_encoding($text, "HTML-ENTITIES", "ISO-8859-1");

فقط جرب هذا

إذا $text يحتوي على charaters غريبون يفعلون ذلك:

$mytext = mb_convert_encoding($text, "HTML-ENTITIES", 'UTF-8');

وقد انتهيت ..

إلى عن على fopen و file_put_contents, ، هذا سيفي بالغرض:

str_replace("&rsquo;", "'", htmlspecialchars_decode(mb_convert_encoding($string_to_be_fixed, "HTML-ENTITIES", "UTF-8")));

استخدم هذا

<meta http-equiv="Content-Type" content="text/html; charset=utf8_unicode_ci" />

بدلا من هذا

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

يجب عليك التحقق من ترميز المنشأ ثم حاول التحويل إلى تصحيح نوع التشفير.

في حالتي ، قرأت ملفات CSV ثم استيراد إلى DB. بعض الملفات تعرض بشكل جيد بعض لا. أتحقق من الترميز وأرى هذا الملف مع تشفير ASCII يعرض جيدًا ، يتم كسر ملف آخر مع UTF-8. لذلك أستخدم التعليمات البرمجية التالية لتحويل الترميز:

if(mb_detect_encoding($content) == 'UTF-8') {
    $content = iconv("UTF-8", "ASCII//TRANSLIT", $content);
    file_put_contents($file_path, $content);
} else {
    $content = mb_convert_encoding($content, 'UTF-8', 'UTF-8');
    file_put_contents($file_path, $content);
}

بعد التحويل ، أدفع المحتوى للملف ثم معالجة الاستيراد إلى DB ، وهو الآن يعرض جيدًا في الواجهة الأمامية

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top