Speciale karakters Microsoft Word invoeren in mySQL

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Hey,

In een beheersysteem kopiëren klanten vaak stukken tekst rechtstreeks vanuit Microsoft Word (2007) naar een tekstvak in het PHP beheersysteem. Door het direct kopiëren worden ook speciale karakters die alleen beschikbaar zijn in Word meegenomen, zoals een breder - teken en smart quotes. Wanneer vervolgens de tekst in het beheersysteem doorgevoerd wordt in de mySQL database wordt de tekst afgekapt bij deze speciale karakters.

Alles staat op UTF-8 (verbinding naar database, velden in database, tabellen in database, meta tags, header in PHP) en ik gebruik de volgende replace code om speciale Word karakters om te zetten:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php

function wordquotes($text)

{

   $badwordchars = array(
                       chr(130),
                       chr(131),
                       chr(132),
                       chr(133),
                       chr(134),
                       chr(135),
                       chr(136),
                       chr(137),
                       chr(138),
                       chr(139),
                       chr(140),
                       chr(145),
                       chr(146),
                       chr(147),
                       chr(148),
                       chr(149),
                       chr(150),
                       chr(151),
                       chr(152),
                       chr(153),
                       chr(154),
                       chr(155),
                       chr(156),
                       chr(159)

                   );
   $fixedwordchars = array(

                        ',',
                        'NLG',
                        '"',
                        '...',
                        '**',
                        '***',
                        '^',
                        'o/oo',
                        'Sh',
                        '<',
                        'OE',
                        "'",
                        "'",
                         '"',
                        '"',
                        '-',
                        '-',
                        '--',
                        '~',
                        '(TM)',
                        'sh',
                        '>',
                        'oe',
                        'Y'

                    );
   return str_replace($badwordchars,$fixedwordchars,$text);
}

?>


Maar zoals je wellicht al vermoedt werkt dit niet; de teksten worden nog steeds afgekapt ter plaatse van de eerste speciale karakter in een tekst.

Weet iemand hoe dit opgelost kan worden?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik zie niet waarom je nog zou moeten gaan replacen als je UTF-8 gebruikt; alle tekens die je hier in je code loopt te replacen hebben in UTF-8 gewoon een codepoint hoor :?

Je bent bezig met symptoombestrijding als je 't mij vraagt; je hebt gewoon ergens iets niet goed zitten. Daarbij: je functie is natuurlijk never-ever opgewassen tegen wat gebruikers er allemaal tegenaan gaan flikkeren; ik zie nu al o.a. de tekens ©, ®, æ, ≤ en ≥ mis gaan bijvoorbeeld (en dat is nog maar 't tipje van de ijsberg).

[ Voor 29% gewijzigd door RobIII op 11-12-2010 22:27 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 08-09 11:33
Hoe stuur je die tekst dan naar de database, met een prepared statement zou dit toch nooit fout kunnen gaan? immers als een teken niet in UTF8 zit kan er nooit een 'string' object van gemaakt worden. Al die gekke tekens hebben een codepoint zoals RobIII al aangeeft, alleen buiten word/in andere letter types zou er dan vaak een '[]
' moeten komen ofzo.

~ Mijn prog blog!