2010-09-15 18 views
0

un champ I vont chercher à partir d'une base de données qui contient un document rtf.caractères spéciaux dans les chaînes entre guillemets simples et doubles

Par exemple, cela pourrait ressembler à ceci:

{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 Calibri;}} {*\generator Msftedit 5.41.21.2509;}\viewkind4\uc1\pard\sa200\sl276\slmult1\lang7\f0\fs22 asdfasdf\par a\par sf\par asd\par fasd\par \b dfas\b0\par dfas\par }

Maintenant, PHP va chercher ce que le double cité de la base de données, le résultat ist que la chaîne ne sera pas interpreded omble chevalier sage ... a pris les caractères spéciaux comme '\ r' et '\ n' sont reconnus.

Comment puis-je convertir cette double cité à une chaîne entre guillemets unique, de sorte que je suis tous les caractères premières? Ou comment puis-je atteindre que la valeur est indiquée comme guillemet simple quand je le récupère de la base de données?

Merci à l'avance

-ralf

+1

Il n'y a rien de tel que l'extraction en guillemets doubles. Que voulez-vous dire avec des caractères bruts? Quel est votre problème exactement? Les guillemets simples ou doubles ne sont importants que pour les littéraux de chaîne. –

Répondre

1

Maintenant, PHP va chercher ce que guillemets doubles de la base de données

Quoi? Le résultat de mysql_fetch_row ou whatewer est juste une chaîne. Rien n'est réinterprété de quelque façon que ce soit. \n reste juste \n. Seule la chaîne littéraux vous écrivez dans le fichier PHP entre guillemets doubles sera "interprété", puis stocké comme une chaîne.

Il n'y a rien comme chaîne simple ou double cité. Il y a juste des littéraux de chaîne entre guillemets simples ou doubles dans le code source de PHP à partir duquel les chaînes PHP seront faites.

Le seul problème que vous avez est maintenant comment process/parse the RTF data. (En supposant que les données ont été stockées dans la colonne de blob donc il n'y a pas de complication avec codages de caractères.)

+0

Le fichier RTF est stocké dans un champ Blob sur une base de données MSSQL. Je récupère les lignes via mssql_fetch_assoc ... Et quand il s 'imprimé toutes les occurences de \ r ou \ n sont interprétés comme ceux-ci ... pas les caractères simples ... – rgn

+0

Voulez-vous dire que vous voulez imprimer \ r/\ n sans être interprété comme des caractères spéciaux? –

+0

oui. Si vous jetez un oeil au début de la chaîne orginial, il devrait ressembler à: {\ rtf1 ... dans hex => 0x7b 0x5c 0x72 0x74 0x66 mais dans la chaîne hold par php il regarde dans hex comme ceci = > 0x7b 0xd7 0x46 0x63 0x15 – rgn

1

Tout d'abord vous devez investir du temps qui (ou quoi) est votre code échappe.

Mais pour une solution rapide, essayez d'utiliser la fonction stripslashes():

$unsecaped = stripslashes($database_data); 

Mais je vous conseille vivement d'essayer de trouver ce qui est des données échappe. Cela peut se produire:

  • Avant d'insérer les données dans la base de données. Ceci est généralement causé par la directive PHP magic_quotes_gpc.
  • Lors de la récupération des données de la base de données.

Mise à jour

Je ne comprends pas votre problème ... Vous voulez garder tous ces antislashs mais il faut éviter de \ r \ n étant interprété comme un retour chariot et saut de ligne ...

Essayez de faire un str_replace pour trouver tous les \ r \ n et en les remplaçant par \ r \ n.

Je ne sais pas si \ r pourrait appartenir à tout caractère char, donc peut-être vous devriez remplacer seulement "\ r "/"\ n", Vous aurez besoin de preg_replace() pour cela éventuellement.

+0

stripsplashes ne aiderait pas, parce que je voudrais convertir ce texte RTF en texte brut. Donc les mots-clés comme \ rtf1 ou \ ansi devraient persister pour l'analyseur. – rgn