我必须将一些数据插入MySQL表中。将检索数据,然后(目前)unserialize
d,此时将选择正确的显示语言......
我已经设法将数据(用markdown编码的文本)变成一组PHP语句,大致如下:
<?php
$component_data = array();
$component_data[65] =
array( // reformatted to avoid side-scrolling
"en"=>"* Student welfare is our top priority.\n* We
have 30 years of experience of running successful
courses for Young Learners.",
"es"=>"* El bienestar de nuestros estudiantes es nuestra
principal prioridad.\n* Contamos con experiencia de
30 años de exitosa realización de cursos para jóvenes.",
"de"=>"* Das Wohl des Lernenden ist unsere oberste Priorität.\n
*Wir organisieren seit 30 Jahren erfolgreich
Sprachkurse für Jugendliche",
"it"=>"* Il benessere degli studenti è la nostra priorità
assoluta.\n* Abbiamo 30 anni di esperienza nei corsi
per ragazzi.",
"fr"=>"* Le bien-être de l’élève a pour nous la priorité absolue.
\n* Nous avons 30 ans d'expérience dans la gestion de cours
réussis pour jeunes étudiants");
?>
我希望使用以下内容将其转换为可以导入MySQL表的格式:
<?php
foreach ($component_data as $id => $value) {
echo "UPDATE `components` SET `component_content`='".
mysql_real_escape_string(serialize($value)).
"' WHERE `id` = '$id';\n";
}
?>
不幸的是它确实进入了,但是页面上的结果被破坏了,即它只显示了序列化的字符串,而不是数组(如果它无法设法取消序列化从MySQL获取的字符串,则这是默认行为)
我已经尝试了许多PHP字符串清理功能的排列,我的头脑坦率地旋转。
理想情况下,我希望能够重新格式化PHP样式数据以插入MySQL数据库,以便在获取时它仍处于unserializ
状态...
...以及奖励积分,如果您可以将utf8外语字符转换为HTML权限并从markdown转换为HTML
答案 0 :(得分:0)
您是否尝试删除'mysql_real_escape_string'以查看反序列化是否有效?
您可以尝试的另一件事是序列化数组上的base64编码。
<?php
foreach ($component_data as $id => $value) {
echo "UPDATE `components` SET `component_content`='".
base64_encode(serialize($value)).
"' WHERE `id` = '$id';\n";
}
?>
然后base64_decode它并在检索时取消序列化。
答案 1 :(得分:0)
感谢大家提供有用的建议。
实际上,问题原来是存储的纺织品(不是降价!)和多语言的utf-8的混合物。将其压缩到MySQL的解决方案有点夸张。首先在数据集上运行纺织品以将其转换为html,然后通过以下方法进行处理,以处理外来字符的编码:
<?php
include 'data.php'; // contains component data similar to above.
foreach ($component_data as $id => $value) {
foreach ($value as $language => $translation) {
$value[$language] = str_replace(
array("<",">"),
array('<','>'),
htmlentities($translation, ENT_NOQUOTES, "UTF-8")
);
}
echo "UPDATE `components` SET `component_content`='".mysql_real_escape_string(serialize($value))."' WHERE `id` = '$id';\n";
}
?>
重要的一点是ENT_NOQUOTES
,这意味着一个简单的str_replace
可以处理打开和关闭标签(谢天谢地,文本中没有数学),mysql_real_escape_string
可以处理单引号。很高兴结束了。