单引号和双引号字符串中的特殊字符

问题描述:

我从包含rtf文档的数据库中获取字段。单引号和双引号字符串中的特殊字符

例如,这可能看起来像这样:

{\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 }

现在PHP读取此为双从数据库中引用,结果IST该字符串不会被interpreded焦炭聪明......假设特殊字符如'\ r'和'\ n'得到认可。

我怎么能从这个双引号转换为单引号字符串,以便我得到所有原始字符?或者当我从数据库中获取值时,如何实现该值与单引号一样?提前

感谢

-ralf

+1

有没有这样的事情取双引号。原始字符是什么意思?你的问题到底是什么?单引号和双引号只对字符串文字很重要。 – 2010-09-15 12:57:25

现在PHP读取此为双从数据库

什么引述 ? mysql_fetch_row或whatewer的结果只是一个字符串。没有什么是以任何方式重新解释的。 \n只是保持\n。只有字符串文字你在PHP文件中写入双引号会被“解释”并存储为一个字符串。

有没有像单引号或双引号字符串。在PHP源代码中只有单引号或双引号的字符串文字,从中可以创建实际的PHP字符串。

你现在唯一的问题是如何process/parse the RTF data。 (假设数据存储在blob列中,所以没有字符编码的复杂性)。

+0

RTF存储在MSSQL数据库的Blob字段中。我通过mssql_fetch_assoc检索行... 并且当它打印时,\ r或\ n的所有出现都被解释为这些...不是普通字符... – rgn 2010-09-15 13:07:06

+0

您的意思是要打印\ r/\ n不被解释为特殊字符? – 2010-09-15 13:12:10

+0

是的。 如果你看看原始字符串的开始,它应该看起来像:{\ rtf1 ...在十六进制=> 0x7b 0x5c 0x72 0x74 0x66 但在字符串保持由php它看起来像十六进制= > 0x7b 0xd7 0x46 0x63 0x15 – rgn 2010-09-15 13:22:24

首先,您应该投入一些时间谁(或什么)在逃避您的代码。

但对于一个快速的解决方案,尽量使用stripslashes()函数功能:

$unsecaped = stripslashes($database_data); 

不过我劝你试图找到什么是逃避数据。 这可能发生:

  • 在将数据插入数据库之前。这通常是由PHP指令magic_quotes_gpc引起的。
  • 从数据库中检索数据时。

更新

我不明白你的问题...... 你要保持所有这些反斜线但避免到\ r和\ n是解释为回车换行...

尝试执行str_replace来查找所有\ r和\ n,并用\ r和\ n替换它们。

我不知道\ r是否属于任何明智的字符,所以也许您应该只替换“\ r ”/“\ n”,您可能需要preg_replace()。

+0

stripsplashes没有帮助,因为我希望将此RTF文本转换为纯文本。因此像\ rtf1或\ ansi这样的关键字应该持续用于解析器。 – rgn 2010-09-15 13:11:17