سؤال

لدي في قاعدة بيانات الكلمات التي تشتمل على حرف خاص (بالإسبانية في الغالب ، مثل tildes).في قاعدة البيانات يتم حفظ كل شيء و يظهر بشكل صحيح مع بريس ، ولكن عندما أحصل على البيانات (باستخدام PHP) وعرضها في المتصفح ، أحصل على حرف غريب ، مثل "" مع مربع...أحتاج العامة تصلح لذلك أنا لا تحتاج إلى الهروب من كل حرف في كل مرة, و أيضا سوف تكون قادرة على إدراج خاصة الإسبانية شخصيات من PHP نموذج في قاعدة البيانات...

HTML هو الصحيح:

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

جميع الجداول databas يتم تعيين utf8_spanish

حرف أحصل على:�

أي اقتراحات???

شكرا!!!

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

المحلول 4

وتغيير محارف HTML إلى ISO-8859-1 إصلاح المشكلة! سخيفة

نصائح أخرى

وأود فقط لتوفير بعض مزيد من التفاصيل حول الحل المقترح من قبل vartec الذي (اعتمادا على تركيب الخلية الخاصة بك) الحل الأكثر الصحيح للمشكلة. أولا وقبل كل قضية مجموعة الأحرف / الترميز في الخلية هو موضوع معقد إلى حد ما والتي تغطي نطاق واسع في دليل الخلية <لأ href = "http://dev.mysql.com/doc/refman/5.1/en/charset.html "يختلط =" نوفولو noreferrer "> الفصل 9.1" مجموعة الأحرف دعم ". في حالتك خصوصا 9.1.4. "مجموعات الأحرف اتصال والنسخ" ستكون الأكثر ملاءمة.

لجعلها قصيرة: الخلية يجب أن تعرف أي مجموعة الأحرف / ترميز تطبيق العميل (الحديث من قاعدة البيانات persoective هذا هو السيناريو PHP الخاص بك) تتوقع أنها سوف فيرت جميع البيانات سلسلة من داخلي مجموعة الأحرف / الترميز المحدد في server-، database-، table- أو على مستوى العمود في شخصية اتصال مجموعة / الترميز. كنت تستخدم UTF-8 على جانب العميل لذلك يجب أن نقول الخلية التي تستخدمها UTF-8. ويتم ذلك من قبل SET NAMES 'utf8' قيادة الخلية التي يجب إرسالها كما الاستعلام الأول على فتح اتصال. اعتمادا على التثبيت وعلى مكتبة عميل الخلية استخدام في البرنامج النصي PHP يمكن القيام بذلك تلقائيا على كل اتصال.

إذا كنت تستخدم شركة تنمية نفط عمان انها مجرد مسألة إعداد معلمة تكوين

$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");

وعن طريق mysqli تغيير الطابع عميل مجموعة / الترميز هو أكثر بسيط:

$mysqli = new mysqli("localhost", "user", "password", "db");
$mysqli->set_charset("utf8");

وآمل أن تساعد على جعل كل شيء أكثر قابلية للفهم.

العدد SET NAMES 'utf8' الحق بعد الاتصال:

$mysqli = new mysqli("localhost", "user", "password", "database");
$mysqli->query("SET NAMES 'utf8'");

هل لديك الخلية ترجمته تلقائيا

$conn = mysql_connect('host', 'user', 'password');
mysql_set_charset('utf8',$conn);

http://es.php.net/manual/ EN / function.mysql-وضع-charset.php

وتحرير: من تعليقك أجمع، أن هذا يتم ترميز الواقع في LATIN1 ذلك

mysql_set_charset('latin1_spanish_ci',$conn);

ولقد وجدت هذا من مكان ما، ومنذ ذلك الحين تم استخدامه ككل دون التفكير كثيرا.

mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");

وحماقة المقدسة .. هذا كان يقود لي مجنون. كنت أحاول أن تفعل الشيء نفسه. أنا أضيف رأس ترميز UTF-8 HTML في وقت لاحق .. mysqli_set_charset () أنقذني، ساعة، ولكن أنا سعيد لأني يكون ذلك نعمل الآن

وظيفة أخرى في محاولة لترميز الحروف الخاصة واللهجات هي htmlentities ()

وأنت ببساطة يمكنك القيام بها:

$link = mysql_connect("host", "user", "password");
mysql_select_db("database", $link); mysql_query("SET NAMES 'utf8';", $link);

وبدوره على ترميز يونيكود في HTML الخاص بك.

عند التعامل مع أحرف خاصة أنا دائما تأخذ الرعاية التالية:

  • بيانات الجدول و الحقل حرف مجموعات كل مجموعة إلى utf8_general_* أو utf8_unicode_*
  • أنا محرر يحفظ ملفات PHP مع الحق في مجموعة الأحرف
  • أنا وضعت default_charset في php.ini إلى UTF-8 أو
  • أرسل Content-Type:نص/html ؛ charset=UTF-8 رأس
  • Charset في العلامة الوصفية هو UTF-8 (هذا هو تنقضها من نوع المحتوى HTTP)
  • عند الاتصال إلى الخلية لقد المسألة الاستعلامات التالية:
    • مجموعة أسماء utf8
    • تعيين مجموعة الأحرف utf8
    • مجموعة COLLATION_CONNECTION="utf8_general_ci"/"utf8_general_ci"

هل أنت متأكد أنك لديك بيانات UTF8 في قاعدة البيانات الخاصة بك لتبدأ؟

والجواب التي عملت بالنسبة لي هي تلك التي نشرت ستيفان جيهريج:

<اقتباس فقرة>   

و$ mysqli-> set_charset ( "UTF8")؛

وأنا فقط بحاجة لإضافة هذا الخط بعد تعريف الاتصال ومشاكلي حيث تحل! :)

(وأنا على نشر جوابا لأنني لا أستطيع التعليق ...).

وبلدي الحل هو: تفعل كل عرضت أعلاه ولكن أيضا ايم العمل مع المفكرة ++ ويجب أن يتم حفظ الملف مثل هذا: اذهب إلى الترميز في علامة التبويب مانو وحفظ الملف -> ترميز UTF8 في

وInterestedly، لم هذا الرمز لا يعمل بالنسبة لي:

$link = mysqli_connect('localhost', 'my_user', 'my_password', 'test');
mysqli_set_charset($link, "utf8");
printf("Current character set: %s\n", mysqli_character_set_name($link));
//shows latin1

ولكن، ووضع محارف داخل شرطا يعمل:

if (!mysqli_set_charset($link, "utf8")) {
    printf("Error loading character set utf8: %s\n", mysqli_error($link));
    exit();
} else {
    printf("Current character set: %s\n", mysqli_character_set_name($link));
    //shows utf8
}

وبلدي الإعداد:

$ rpm -qa|grep -E "php|maria"
mariadb-5.5.56-2.el7.x86_64
mariadb-server-5.5.56-2.el7.x86_64
mariadb-libs-5.5.56-2.el7.x86_64
php-pdo-5.4.16-45.el7.x86_64
php-cli-5.4.16-45.el7.x86_64
php-5.4.16-45.el7.x86_64
php-common-5.4.16-45.el7.x86_64
php-mysql-5.4.16-45.el7.x86_64
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top